Repolode
maxpert

maxpert/marmot

无主节点的分布式 SQLite 复制服务器,任意节点可写入,兼容 MySQL 协议。

可替代:CockroachDBAmazon Aurora

Star
2,823
Fork
81
未关闭 Issue
39
最近提交
20天前

这是什么?

Marmot 是一个用 Go 编写的分布式 SQLite 服务器。集群中任意节点都可以接受写入,不存在需要故障切换的单一主节点。节点之间通过 gossip 协议同步变更,每次写入通过两阶段提交完成,一致性级别可选 ONE、QUORUM 或 ALL。同一行的冲突按混合逻辑时钟时间戳采用last-write-wins 策略解决。

客户端通过 MySQL 协议连接,因此现有的驱动、ORM 以及 DBeaver、MySQL Workbench 等图形工具无需修改即可使用。复制采用行级变更数据捕获,而不是回放 SQL 语句;DDL 语句会在集群范围加锁并改写为幂等形式后复制。变更还可以以 Debezium 兼容的 JSON 格式发布到 Kafka 或 NATS。

此外,项目内置基于 IVF/PQ 的向量检索,索引文件保存在每个节点的 SQLite 文件旁,并提供只读副本模式,适合边缘部署。

核心功能

  • 01任意节点可接受写入,无需选主或故障切换。
  • 02兼容 MySQL 协议,可直接使用标准 MySQL 客户端和驱动。
  • 03通过两阶段提交复制行级变更,一致性级别可调。
  • 04DDL 语句在集群范围加锁复制,并自动改写为幂等形式。
  • 05可将变更事件以 Debezium 兼容格式发布到 Kafka 或 NATS。
  • 06内置向量检索,可通过 SQL 函数结合普通过滤条件进行相似度查询。

适用场景

  • 部署多地域 WordPress 站点,使用可复制的数据库。
  • 在边缘节点保存配置或商品目录的区域只读副本。
  • 构建小型 RAG 存储,将向量检索与普通 SQL 过滤条件结合。
  • 将数据库变更流式推送到 Kafka 或 NATS,供下游数据管道使用。

快速上手

  1. 1

    启动单节点集群

    ./marmot-v2
  2. 2

    使用 MySQL 客户端连接

    mysql -h localhost -P 3306 -u root

使用前须知

  • 提供最终一致性,而非强可串行化。
  • 每个节点都保存全部数据副本,因此更适合较小的数据集,不适合超大规模数据(超过 100GB)。
  • 不支持多个节点同时对同一数据库执行 DDL,且 ALTER TABLE 重放的安全性较差。
  • 上传的媒体文件等不会被复制,需要单独的共享存储。

标签

常见问题

marmot 是什么?
无主节点的分布式 SQLite 复制服务器,任意节点可写入,兼容 MySQL 协议。 Marmot 是一个用 Go 编写的分布式 SQLite 服务器。集群中任意节点都可以接受写入,不存在需要故障切换的单一主节点。节点之间通过 gossip 协议同步变更,每次写入通过两阶段提交完成,一致性级别可选 ONE、QUORUM 或 ALL。同一行的冲突按混合逻辑时钟时间戳采用last-write-wins 策略解决。
marmot 可以免费使用吗?用的什么许可证?
marmot 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
marmot 还在维护吗?
活跃维护中。marmot 最近一次提交是在 2026年9月30日。
marmot 适合用来做什么?
部署多地域 WordPress 站点,使用可复制的数据库。 在边缘节点保存配置或商品目录的区域只读副本。 构建小型 RAG 存储,将向量检索与普通 SQL 过滤条件结合。 将数据库变更流式推送到 Kafka 或 NATS,供下游数据管道使用。
marmot 怎么安装和运行?
启动单节点集群: ./marmot-v2 使用 MySQL 客户端连接: mysql -h localhost -P 3306 -u root
在哪里获取 marmot?
源代码和安装说明在 GitHub 上:https://github.com/maxpert/marmot

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目