
低メモリ向けGraphDBで、Bolt+TLSサポート、保存時暗号化、ベクトルを備え、ローカルレプリカのグラフユースケース向けに設計されています。
現在のバージョン: v0.25.2 — すべてのリリース。
一言で言うと: Slaterはメモリに収まらないグラフ — 数億ノードと数十億エッジをわずか数百MBのRAMで — 標準のBoltプロトコルで提供し、任意のneo4jドライバがそのまま動作します。ディスクネイティブなベクトル検索がグラフの隣に配置され、さらにライブで永続的な書き込みも犠牲にすることなく受け付けます。常駐メモリは、グラフのサイズではなく、あなたが選択するキャッシュ予算によって決まります。
ショートカット
| Slaterが存在する理由 | 読み取りと書き込み | 得られるもの | 機能 |
| Dockerでの実行 | 仕組み | 書き込み可能レイヤー | ストレージバックエンド |
| マウント | 設定 | ACL | ヘルスチェック |
| 実例 | 開発 | パフォーマンス | ライセンス |
| Graphitiメモリストア | 📖 完全マニュアル |
グラフデータベースは、データをもの(ノード)とそれらの間の関係(エッジ)として保存し、関係を第一級市民として扱います。これは、行ではなく接続に関する質問をするときに必要なものです — 「このアカウントから3ホップ以内にいるのは誰か?」、「このビルドの背後にある完全な依存関係チェーンは何か?」、「どのアカウントがデバイス、住所、カードを共有しているか?」 — これらのクエリはSQLでは再帰的結合の沼になりますが、グラフでは自然に導き出されます。
グラフデータベースに関する最も一般的な不満は、RAMに保持できる範囲を超えてスケールしないことです。 多くのグラフDB(例: neo4j、Memgraph、FalkorDBなど)はグラフ全体を常駐させます: 40 GBのグラフには40 GBのメモリが必要です — インスタンスごとに。リージョンごと、テナントごと、ポッドごとにレプリカが必要ですか? 請求額が倍増します。そして、あるサイズを超えると単純にロードできません: 例えば、9000万ノード / 15億エッジのWikidataグラフは約64〜128 GiBの常駐メモリが必要なので、インメモリエンジンではまったく開けません。
Slaterはその反論です。グラフをメモリにロードする代わりに、一度だけオフラインでコンパイルします: slater-buildはあなたのデータをコンテンツアドレス指定された不変のオンディスクイメージに変換し、任意の数のSlaterサーバーがそのイメージをBolt経由で提供します(既存のneo4jドライバがそのまま動作します)。ブロックをオンデマンドでページングし、固定のキャッシュ予算のみを常駐させます。これが、同じ9000万ノードのグラフが数百MBのRAMから提供できる理由です — グラフサイズとメモリ請求額が切り離されています。4 GBのグラフと400 GBのグラフは、提供するためのRAMコストが同じです。そのため、安価でステートレスな読み取りレプリカを展開し、ヒープではなくストアにグラフを保持させることができます。
これにより、RAGの背後にあるナレッジグラフ、レコメンデーションおよびアイデンティティグラフ、依存関係グラフ — 大規模で接続された、安価かつ頻繁にクエリしたいものすべてに自然に適合します。ディスクネイティブなベクトル検索がグラフのすぐ隣に配置されるため、同じエンジンが埋め込みの検索レイヤーにもなります。
ただし、一度コンパイルしたからといって凍結されるわけではありません。そのイメージはベースであり、最終状態ではありません: オプトインの書き込みレイヤーがその上に配置されるため、ライブグラフを再構築することなく修正および拡張できます。
コアは不変ですが、グラフは不変ではありません。書き込みレイヤーをオンにすると(delta.enabled)、Bolt経由で書き込みます — 1つのプロパティを修正し、ノードを追加し、エッジを撤回する — 変更は永続的に記録され、イメージの再構築は不要です。読み取り側でコストを抑えるのは、書き込みがどこに存在するかです。
書き込みは不変コア上のログ構造マージ(LSM)レイヤーに蓄積されます: 書き込み先行ログとインメモリテーブルがあり、不変のデルタセグメントにスピルし、定期的な統合によって新しいコアに折り畳まれます。これがもたらすもの:
count(*)、ラベルおよび関係タイプの周辺分布 — は、書き込みが未処理でもメタデータ読み取りのままです: デルタは独自のカウンターを保持するため、50万件の未処理書き込みがある9160万ノードのコアに対するcount(*)は、1ブロックにも触れずに数十ミリ秒で回答します。fsyncの後にのみSUCCESSを返します。書き込みをグループ化すれば安価です — 書き込みUNWINDは行ごとではなくバッチごとに1回のfsyncをコミットします。MERGE / MATCH … SET / DELETE(およびCREATE / REMOVE、デタッチ削除、関係書き込み)— または同等のISO GQLデータ変更ステートメント(INSERT / SET / REMOVE / DELETE)。これらは同じパスに降りてきます。ノードとエッジに対して、データがすでにアドレス指定されている方法で、修正、挿入、アップサート、撤回を行います。レイヤーがオフの場合 — デフォルト — Slaterは純粋な不変コアを提供し、書き込みを拒否します。完全なモデルについては書き込み可能レイヤーを参照してください。
名前について。 SlaterはArcher(素晴らしい番組)のCIAエージェントにちなんで名付けられました。 彼は単一の名前で通すことを主張します — 「Just… Slater」— そして私のお気に入りの キャラクターの1人です。詳細は キャラクターwikiページを参照してください。
MERGE / SET / DELETE、グループコミットされfsyncで永続化され、統合によって新しいコアに折り畳まれます。読み取りはそのコストを負担しません。currentポインタを原子的に切り替えると、サーバーがそれを取得します。すべてのブロックがチェックサムされるため、半分コピーされたイメージは提供されず拒否されます。| 機能 | あなたにとっての意味 |
|---|---|
| 制限された予測可能なメモリ | 常駐メモリは、あなたが設定する3つのキャッシュ予算を追跡し、エントリごとおよびアロケータのオーバーヘッドの範囲内で制限されます — グラフサイズに応じて成長することはありません。グラフ全体にプロビジョニングする代わりに、パフォーマンス/RAMのトレードオフを調整します。バックグラウンドパージ付きのjemallocアロケータは、重いクエリバースト後に解放されたメモリをOSに返すため、常駐サイズはバースト後の高水位マークに固定されるのではなく、アイドル時の下限に戻ります。 |
| すぐに使えるマルチテナント | 1つのサーバーが、ユーザーごとの読み取り権限を持つ多くのグラフをホストします — ほとんどのグラフDBが有料/エンタープライズ層に予約しているマルチデータベース分離です。 |
| 保存時および転送中の暗号化 | ブロックごとのXChaCha20-Poly1305シーリング(キーはディスクに書き込まれることはありません)に加えて、オプションのTLS(bolt+s://)。設計上GDPRに準拠しています。暗号化は認証された整合性ももたらします: ビルダーはキー付きMACでマニフェストをシールし、キーを保持するサーバーはそれを検証し、マニフェストが偽造、変更、またはMACが剥がされた世代の提供を拒否します。キーなし(平文)イメージは、キーなしのコンテンツハッシュのみで保護されます — 完全性と破損の検出であり、改ざんの検出ではありません。各設定における整合性の意味を参照してください。 |
| 小さなインストール | distroless glibcベース上の小さなストリップ済みバイナリ(シェル/aptなし)— マルチアーキテクチャ(amd64/arm64)イメージは約22MB、サーバーのみのslater:latest-liteタグは約12MBです。純Rust TLS、OpenSSLなし。プルして実行するだけです。 |
| 定期的な公開用に設計 | グラフをオフラインでビルドし、不変として提供し、新しいバージョンをゼロダウンタイムで原子的に交換 — データウェアハウス/スケジュール更新ワークロードに最適です。 |
| 負荷下でも堅牢 | サーバーとオフラインビルダーの両方が#![forbid(unsafe_code)]でコンパイルされます — エンジンの唯一のunsafeは監査済みのjemallocアロケータクレートにあります。コアは不変であるため、読み取りはロックを取らず、ライターを待つことはありません。単一のライターが書き込みパスの背後でミューテーションを直列化します。GCポーズなし、データレースなし。1つの悪いクエリでサーバーをダウンさせることはできません。 |
| neo4jツールと連携 | Bolt 5.4 / 4.4 / 4.1を話します — 標準のneo4jドライバ(JS、Python、Go、Javaなど)、cypher-shell、またはグラフブラウザをそのまま使用できます。 |
| 豊富なCypherクエリサーフェス | 広範な読み取りサーフェス: MATCH/WHERE/WITH/UNION、CALL {…}サブクエリ、70以上の関数と集計、時間および地理空間値、正規表現。 |
| ライブで永続的な書き込み | 不変コア上のオプトイン単一ライターLSMレイヤー(delta.enabled): ノードと関係に対するビジネスキーMERGE / SET / DELETE / CREATE / REMOVE、バッチ書き込みUNWIND(バッチごとに1回のfsync)、およびCALL slater.consolidate() — グループコミットされ、fsyncで永続化され、統合によって新しいコアに折り畳まれます。デルタが空の場合、読み取りパスはバイト単位で同一です。 |
| ISO GQL、読み取りと書き込み | 同じBolt接続上でISO GQL(ISO/IEC 39075)のサブセットを話します — 定量化パス、パス制限子、最短パスセレクタ、ラベル/タイプブール式、FOR、CAST、オプションのGQL/CYPHER方言プレフィックス — そして書き込みレイヤーがオンの場合、GQLのデータ変更ステートメント(INSERT / SET / REMOVE / [DETACH] DELETE)は同じ永続的な書き込みパスに降りてきます。CypherとGQL、読み取りと書き込み、1つのエンジンで。 |
| ベクトル+グラフを1つのエンジンで | 埋め込み/RAG用のディスクネイティブANNベクトル検索(Vamana + PQ; コサイン / L2 / ドット)に加えて、グラフアルゴリズム(PageRank、BFS、媒介中心性、WCCなど)— 数百万のベクトルでもメモリは制限されます。埋め込みは書き込み可能です(FreshDiskANNスタイルの書き込みラダー): ベクトルの挿入 / 更新 / 削除、即座にKNNで可視、再構築なしでベースに折り畳まれます。 |
| ネットワークストレージでも安全 | すべてのファイルはBLAKE3コンテンツハッシュ化され、オープン時に検証されます。破損または半分コピーされたイメージは提供されず拒否されます。NFS/リモートボリューム用に設計されています(mmapの驚きはありません)。 |
| プラグ可能なストレージバックエンド | 同じ世代フォーマットをローカルファイルシステム、S3(S3互換)バケット、またはGoogle Cloud Storageバケットから提供 — 一度公開してステートレスレプリカに展開 — オブジェクトストアの前のオプションのローカルSSDキャッシュ層付き。ストレージバックエンドを参照してください。 |
ワークスペースを構成する2つのバイナリ: