Repolode
maxpert

maxpert/marmot

Распределённый SQLite-сервер без лидера: принимает записи на любом узле и поддерживает протокол MySQL.

Open source альтернатива:CockroachDBAmazon Aurora

Звёзды
2,823
Форки
81
Открытые issues
39
Последний коммит
20 дней назад

Что это?

Marmot — распределённый сервер SQLite, написанный на Go. Записи можно отправлять на любой узел кластера, поэтому единственного основного узла, который пришлось бы заменять при сбое, нет. Узлы обмениваются изменениями по gossip-протоколу, а каждая запись координируется с помощью двухфазного коммита на настраиваемом уровне согласованности (ONE, QUORUM или ALL). Конфликты при изменении одной и той же строки разрешаются по принципу last-write-wins на основе метки времени гибридных логических часов.

Клиенты подключаются по протоколу MySQL, поэтому существующие драйверы, ORM и GUI-инструменты, например DBeaver или MySQL Workbench, можно использовать без изменений. В проекте указана поддержка WordPress и есть пример кластера из трёх узлов. Репликация основана на захвате изменений на уровне строк, а не на повторном выполнении SQL-операторов. DDL-операторы реплицируются с блокировкой на уровне всего кластера и автоматически преобразуются в идемпотентные. Изменения также можно публиковать в Kafka или NATS в формате JSON, совместимом с Debezium.

Кроме того, в проект встроен слой векторного поиска с индексами IVF/PQ, которые хранятся рядом с файлом SQLite каждого узла, а также режим реплики только для чтения для развёртываний на периферии.

Ключевые возможности

  • 01Записи можно отправлять на любой узел; выбор лидера и переключение при сбое не требуются.
  • 02Поддерживает протокол MySQL, поэтому работают стандартные клиенты и драйверы MySQL.
  • 03Реплицирует изменения на уровне строк с помощью двухфазного коммита и настраиваемого уровня согласованности.
  • 04Реплицирует DDL с блокировкой на уровне всего кластера и автоматическим преобразованием операторов в идемпотентные.
  • 05Публикует события об изменениях в Kafka или NATS в формате, совместимом с Debezium.
  • 06Предоставляет встроенный векторный поиск с SQL-функциями для поиска по сходству с фильтрами.

Сценарии использования

  • Запуск многорегионального сайта WordPress на основе реплицируемой базы данных.
  • Поддержание региональных реплик данных конфигурации или каталога товаров на периферии.
  • Создание небольшого хранилища для RAG, объединяющего эмбеддинги с обычными SQL-фильтрами.
  • Передача изменений базы данных в Kafka или NATS для последующих конвейеров обработки данных.

Быстрый старт

  1. 1

    Запустите кластер с одним узлом

    ./marmot-v2
  2. 2

    Подключитесь с помощью клиента MySQL

    mysql -h localhost -P 3306 -u root

Что важно знать

  • Обеспечивает конечную согласованность, а не строгую сериализуемость.
  • Каждый узел хранит полную копию всех данных, поэтому система подходит для небольших наборов данных, а не для очень больших (свыше 100 ГБ).
  • Параллельное выполнение DDL для одной и той же базы данных с нескольких узлов не поддерживается, а повторное выполнение ALTER TABLE менее безопасно.
  • Медиафайлы, например загруженные файлы, не реплицируются и требуют отдельного общего хранилища.

Темы

Частые вопросы

Что такое marmot?
Распределённый SQLite-сервер без лидера: принимает записи на любом узле и поддерживает протокол MySQL. Marmot — распределённый сервер SQLite, написанный на Go. Записи можно отправлять на любой узел кластера, поэтому единственного основного узла, который пришлось бы заменять при сбое, нет. Узлы обмениваются изменениями по gossip-протоколу, а каждая запись координируется с помощью двухфазного коммита на настраиваемом уровне согласованности (ONE, QUORUM или ALL). Конфликты при изменении одной и той же строки разрешаются по принципу last-write-wins на основе метки времени гибридных логических часов.
marmot можно использовать бесплатно? Какая у него лицензия?
marmot распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
marmot всё ещё поддерживается?
Активно поддерживается. Последний коммит в marmot — 30 сент. 2026 г..
Для чего можно использовать marmot?
Запуск многорегионального сайта WordPress на основе реплицируемой базы данных. Поддержание региональных реплик данных конфигурации или каталога товаров на периферии. Создание небольшого хранилища для RAG, объединяющего эмбеддинги с обычными SQL-фильтрами. Передача изменений базы данных в Kafka или NATS для последующих конвейеров обработки данных.
Как установить marmot?
Запустите кластер с одним узлом: ./marmot-v2 Подключитесь с помощью клиента MySQL: mysql -h localhost -P 3306 -u root
Где скачать marmot?
Исходный код и инструкции по установке — на GitHub: https://github.com/maxpert/marmot

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты