Minigraf: Rust製の組み込み型バイテンポラルグラフデータベース

概要

Minigrafは、AIエージェント、モバイルアプリケーション、およびブラウザ環境向けに設計された、自己完結型の組み込みグラフデータベースです。「コネクテッドデータのためのSQLite」として機能し、Datalogクエリとバイテンポラル(二重時間)タイムトラベルモデルをサポートする単一ファイルストレージシステムを提供します。これにより、ユーザーはトランザクション時間または有効時間の任意の時点におけるデータ状態をクエリできます。

主要な技術的機能

バイテンポラル・タイムトラベル

Minigrafは、すべての事実が2つの異なる時間軸によって追跡されるバイテンポラルモデルを実装しています。

  • トランザクション時間: 事実がデータベースに記録された時間。
  • 有効時間: その事実が現実世界で真であった時間。

このアーキテクチャにより、履歴を失うことなく遡及的な修正が可能になります。例えば、ユーザーは元の記録を保持したまま誤って入力された値を修正でき、システムが特定の瞬間に何を信じていたかという監査証跡を有効にできます。

Datalogクエリ言語

Minigrafは、グラフ探索のためにSQLやCypherではなくDatalogを採用しています。プロジェクトでは、Datalogは設計上再帰的であり、マルチホップ探索を自然に行えるため、グラフデータに対して優れていると主張しています。さらに、[?e :attr ?v]のような単純なパターンで構成される統一された文法は、LLMが生成するクエリとの親和性が非常に高いです。

組み込みアーキテクチャ

Minigrafは、別のサーバーとして実行するのではなく、アプリケーションに直接組み込むように設計されています。主なアーキテクチャ上の制約は以下の通りです。

  • 単一ファイルストレージ: データは単一の .graph ファイルに保存されます。
  • ターゲット規模: 100万ノード未満のデータセットに最適化されています。
  • ゼロコンフィグレーション: データベースは Minigraf::open("data.graph") という単純な呼び出しで初期化されます。
  • 非分散型: 設計上、Minigrafはクラスタリング、シャーディング、レプリケーションをサポートしておらず、各インスタンスが独自のローカルファイルを所有します。

パフォーマンスと耐久性

現在のベンチマークによると、100万件の事実に対するポイントクエリは4.3秒から4.5秒かかります。システムは、境界付きパターンには選択的なB+ツリー検索を使用し、全属性スキャンにはO(N)を使用します。

データの整合性を確保するため、Minigrafは2つの耐久性モードを採用しています。

  • SyncMode::Full: すべての書き込みが即座に fsync されます(デフォルト)。
  • SyncMode::Normal: 一括ロードや移行に使用され、スループットを向上させますが、checkpoint() は依然として無条件に fsync をトリガーします。

ファイルベースのデータベースは事実あたり最大4,080バイトのシリアル化サイズを強制しますが、インメモリデータベースにはそのような制限はありません。

プラットフォームサポートとバインディング

MinigrafはRust(バージョン1.89以降が必要)で記述されており、さまざまなレベルの言語バインディングを提供しています。

プラットフォーム ティア パッケージ/メソッド
Rust (Native) 1 minigraf on crates.io
Python 1 minigraf on PyPI
Browser WASM 2 @minigraf/browser on npm (IndexedDB-backed)
WASI 2 @minigraf/wasi on npm
Node.js 2 minigraf on npm
Java/Android 2 Maven Central (.aar for Android)
iOS/macOS 2 Swift Package Manager (.xcframework)
C / FFI 2 C header and shared library

ティア1のバインディングは完全にテストされ、コアリリースと同時にリリースされます。ティア2のバインディングは実験的であり、スモークテスト済みです。

ユースケース

AIエージェント

Minigrafは、AIエージェントのテンポラル(時間的)メモリ層として機能します。エージェントは信念を保存し、履歴を消去することなくそれらを撤回または修正し、過去の状態をリプレイして特定の決定の背後にある推論を監査できます。これは「GraphRAG」パターンにおいてベクトルストアを補完するもので、ベクトルストアが類似性検索を処理し、Minigrafが関係性および時間的クエリを処理します。

モバイルアプリケーション

バイテンポラルモデルは、遡及的な修正を必要とするオフラインファーストのアプリケーションをサポートします。ネイティブのKotlinおよびSwiftバインディングにより、開発者がRustコードを書くことなくAndroidおよびiOSアプリに統合できます。

コミュニティの議論と反論

このプロジェクトは独自の機能の組み合わせを強調していますが、Hacker Newsの一部のコミュニティメンバーは、これらのユースケースに対して新しいクエリ言語やデータベースが必要なのか疑問を呈しています。

"リレーションシップテーブルに(タイムスタンプを含む)型付きプロパティをサポートする既存のCypherベースのデータベースであれば、このユースケースを十分に処理できる。" — @handle

また、個人の生産性ツールに対して「エンティティのテンポラルなマルチバース」という実用的なアプリケーションに疑問を呈する声もあり、コード分析のような特定のアプリケーションに対しては、標準的なSQLiteの実装で(例えば1,000万エッジ規模の)グラフデータを処理できると示唆されています。

Sources

関連

  • プロジェクト
  • プロジェクト
  • Dispatch
  • プロジェクト
  • プロジェクト