エッジレプリケーションへの新しいアプローチ
- データ同期は、思っている以上に難しい問題。既存のソリューションは、データセット全体をクライアントに同期する方式か、論理的な変更を追跡する方式に大きく分かれる。
- Graftはこうした問題を解決するために設計されており、シンプルな物理レプリケーションと効率的な論理レプリケーションを組み合わせたオープンソースのストレージエンジン。
遅延同期: 必要な速度で同期
- Graftはクライアントがいつ同期するかを選べるようにしており、断続的にしかネットワークへ接続しないエッジ環境に適している。
- サーバーは、クライアントの最後のスナップショット以降に変更されたページのインデックスを提供し、クライアントは必要なデータだけを選択的に取得できる。
部分同期: 必要なものだけ同期
- エッジ環境ではデータセット全体をダウンロードできないため、Graftは必要なページだけを選択的に取得する部分同期をサポートする。
- Graftは一般的な予測アルゴリズムとドメイン知識を活用し、必要なページを事前取得できる。
エッジ: 必要な場所の近くで同期
- Graftは世界中のエッジサーバーを通じてデータを提供し、ユーザーがどこにいても低レイテンシと高い応答性を維持する。
- クライアントは軽量に設計されており、ブラウザー、モバイルアプリ、サーバーレス環境に簡単に統合できる。
一貫性: 安全な同期
- Graftは強力な一貫性モデルを提供し、クライアント間の競合を安全に処理する。
- クライアントはスナップショット分離モデルによってデータの一貫したビューを得られ、書き込みは厳密に直列化される。
Graftで何が作れるのか?
- Graftはさまざまなエッジネイティブアプリケーションに向けた強力な基盤を提供する。
- オフラインファーストアプリ、クロスプラットフォームデータ、ステートレスな読み取りレプリカ、任意データのレプリケーションなどが可能。
GraftのSQLite拡張 (libgraft)
libgraftはSQLiteのネイティブ拡張で、クライアントが実際に使うデータベースの一部だけを複製することで、リソースが限られた環境でもSQLiteを実行できるようにする。
- 非同期レプリケーション、遅延部分レプリケーション、スナップショット分離、ポイントインタイムリカバリなどの機能を提供する。
参加方法
- GraftはGitHubで開発されており、コミュニティからの貢献を歓迎している。
- Discordに参加するか、メールでフィードバックを送ることができる。
- Graft管理サービスのウェイトリストに登録できる。
ロードマップ
- Graftはまだ開発中で、WebAssembly対応、SQLSyncとの統合、さまざまなクライアントライブラリ対応などの計画がある。
- 書き込みレイテンシの削減、ガベージコレクション、認証と認可、ボリュームフォーク、競合処理などの機能も追加予定。
他のSQLiteレプリケーションソリューションとの比較
- GraftはmvSQLite、Litestream、cr-sqlite、Cloudflare Durable Objects、Cloudflare D1、Turso & libSQL、rqlite & dqlite、Verneuilなどと比べて独自の強みを持つ。
- 部分レプリケーション、任意のデータ構造のサポート、エッジでの効率的なレプリケーションなどが主な差別化要因。
1件のコメント
Hacker Newsのコメント
一貫性モデルが理解できない
Graftの作者が感謝を伝える
一貫性モデルはgitに似ていると理解した
クライアントがGraftを取得すると、何が変更されたのかを正確に把握できる
実装の詳細には触れていない
VFSを使うのは面白い「ハック」だと思う
Leapアルゴリズムを使ったプロジェクトがとても興味深い
モバイルクライアントが低速な接続にいると問題が起こる可能性がある
ページを基本の同期単位として使うアプローチが興味深い
非常に難しい問題だ