Repolode
maxpert

maxpert/marmot

任意のノードで書き込みを受け付け、MySQL wire protocolで通信する、リーダーレスな分散SQLiteレプリケーションサーバー。

代替できる製品:CockroachDBAmazon Aurora

スター
2,823
フォーク
81
未解決の Issue
39
最終コミット
20 日前

これは何?

MarmotはGoで書かれた分散SQLiteサーバーです。クラスター内のどのノードでも書き込みを受け付けられるため、フェイルオーバーが必要な単一のプライマリはありません。ノード間ではgossip protocolを使って変更を交換し、各書き込みは設定可能な整合性レベル(ONE、QUORUM、ALL)で2フェーズコミットにより調整されます。同じ行で競合が発生した場合は、hybrid logical clockのタイムスタンプに基づくlast-write-winsで解決します。

クライアントはMySQL protocolで接続するため、既存のドライバーやORM、DBeaverやMySQL WorkbenchなどのGUIツールを変更せずに利用できます。対応アプリケーションとしてWordPressが挙げられており、3ノード構成のサンプルクラスターも含まれています。レプリケーションはSQL文の再実行ではなく、行単位の変更データキャプチャで行います。また、DDL文はクラスター全体のロックを使ってレプリケーションされ、冪等になるよう書き換えられます。変更はDebezium互換のJSON形式でKafkaやNATSに配信することもできます。

各ノードのSQLiteファイルと同じ場所に保存されるIVF/PQインデックスを使った、組み込みのベクトル検索レイヤーも備えています。また、エッジ環境向けの読み取り専用レプリカモードも利用できます。

主な機能

  • 01リーダー選出やフェイルオーバーの手順なしに、任意のノードで書き込みを受け付けます。
  • 02MySQL wire protocolで通信するため、標準的なMySQLクライアントやドライバーを利用できます。
  • 032フェーズコミットと調整可能な整合性レベルにより、行単位の変更をレプリケーションします。
  • 04クラスター全体のロックと、自動的な冪等性を保つ書き換えにより、DDLをレプリケーションします。
  • 05Debezium互換の形式で、変更イベントをKafkaやNATSに配信します。
  • 06フィルター付き類似検索クエリに使えるSQL関数を備えた、組み込みのベクトル検索を提供します。

ユースケース

  • レプリケーションされたデータベースを使って、マルチリージョンのWordPressサイトを運用する。
  • 設定データや商品カタログデータの読み取り専用レプリカを、エッジ環境の各リージョンに維持する。
  • 埋め込みベクトルと通常のSQLフィルターを組み合わせた、小規模なRAGストアを構築する。
  • データベースの変更をKafkaやNATSにストリーミングし、後続のデータパイプラインに取り込む。

クイックスタート

  1. 1

    シングルノードクラスターを起動する

    ./marmot-v2
  2. 2

    MySQL クライアントで接続する

    mysql -h localhost -P 3306 -u root

使う前に知っておきたいこと

  • 強い直列化可能性ではなく、結果整合性を提供します。
  • 各ノードがすべてのデータの完全なコピーを保持するため、非常に大規模(100GB超)なデータセットではなく、小規模なデータセットに適しています。
  • 複数のノードから同じデータベースに対して同時に DDL を実行することはできません。また、ALTER TABLE は安全に再実行しにくい操作です。
  • アップロードなどのメディアファイルはレプリケーションされないため、別途共有ストレージが必要です。

トピック

よくある質問

marmot とは?
任意のノードで書き込みを受け付け、MySQL wire protocolで通信する、リーダーレスな分散SQLiteレプリケーションサーバー。 MarmotはGoで書かれた分散SQLiteサーバーです。クラスター内のどのノードでも書き込みを受け付けられるため、フェイルオーバーが必要な単一のプライマリはありません。ノード間ではgossip protocolを使って変更を交換し、各書き込みは設定可能な整合性レベル(ONE、QUORUM、ALL)で2フェーズコミットにより調整されます。同じ行で競合が発生した場合は、hybrid logical clockのタイムスタンプに基づくlast-write-winsで解決します。
marmot は無料で使えますか?ライセンスは?
marmot は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
marmot は今もメンテナンスされていますか?
活発にメンテナンス中。marmot の最終コミットは 2026年9月30日 です。
marmot は何に使えますか?
レプリケーションされたデータベースを使って、マルチリージョンのWordPressサイトを運用する。 設定データや商品カタログデータの読み取り専用レプリカを、エッジ環境の各リージョンに維持する。 埋め込みベクトルと通常のSQLフィルターを組み合わせた、小規模なRAGストアを構築する。 データベースの変更をKafkaやNATSにストリーミングし、後続のデータパイプラインに取り込む。
marmot のインストール方法は?
シングルノードクラスターを起動する: ./marmot-v2 MySQL クライアントで接続する: mysql -h localhost -P 3306 -u root
marmot はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/maxpert/marmot

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト