jeffhajewski/latticedb
Embedded single-file knowledge graph database with vector search and full-text search for AI/RAG apps
LatticeDB – 埋め込み型グラフ+ベクトル検索データベース
概要 – LatticeDB は、単一ファイルの埋め込み型プロパティグラフデータベースで、高次元ベクトル(HNSW 経由)と全文(BM25)もインデックス化します。ローカルプログラムは、1 つの Cypher スタイルのクエリ言語を使用して、リレーションシップ、意味的類似性、またはキーワード検索によって同じデータをクエリできます。
主なセールスポイント
- 単一ファイル、設定不要 – データベース全体(グラフ、ベクトル、FTS、WAL)がポータブルなファイルに格納されます。サーバープロセスは不要です。
- 統一クエリレイヤー –
MATCH … WHERE node.embedding <=> $vec < 0.3 AND node.text @@ "keyword"が単一のステートメントで機能します。 - 埋め込み型、単一ライターモデル – 単一マシンで実行されるデスクトップアプリ、ツール、エージェントに最適です。
- 高速 – サブマイクロ秒のノードルックアップ、100 万ベクトルでの約 0.8 ミリ秒の 10-NN 検索(100% 再現率)、19 マイクロ秒の BM25 テキスト検索。
- バインディング – ネイティブ C API に加え、Python、TypeScript/Node、Go、Java 向けのファーストクラスライブラリ。
インストール
| 言語 | コマンド |
|---|---|
| CLI | curl -fsSL https://raw.githubusercontent.com/jeffhajewski/latticedb/main/dist/install.sh | bash |
| Python | pip install latticedb |
| TypeScript / Node | npm install @hajewski/latticedb |
| Java | bindings/java README を介して JNI ブリッジをビルドします(JDK 21+)。 |
| Go | bindings/go/README.md に従ってください(cgo ワークフロー)。 |
パッケージは、サポートされているプラットフォームでネイティブの liblattice ライブラリをバンドルしています。LATTICE_BUNDLE_LIB_DIR 環境変数を使用して、カスタムビルドをステージングすることもできます。
クイック例(Python)
from latticedb import Database
from latticedb.embedding import hash_embed
with Database("knowledge.db", create=True, enable_vectors=True, vector_dimensions=128) as db:
db.create_node_fts_index("Chunk", "text")
with db.write() as txn:
alice = txn.create_node(labels=["Person"], properties={"name": "Alice"})
doc = txn.create_node(labels=["Document"], properties={"title": "Attention Is All You Need"})
chunk = txn.create_node(labels=["Chunk"], properties={"text": "The transformer architecture uses self‑attention..."})
txn.set_vector(chunk.id, "embedding", hash_embed("transformer self‑attention", 128))
txn.create_edge(chunk.id, doc.id, "PART_OF")
txn.create_edge(doc.id, alice.id, "AUTHORED_BY")
txn.commit()
results = db.query(
"""
MATCH (c:Chunk)-[:PART_OF]->(d:Document)-[:AUTHORED_BY]->(a:Person)
WHERE c.embedding <=> $q < 0.5
RETURN d.title, c.text, a.name
ORDER BY c.embedding <=> $q
LIMIT 5
""",
parameters={"q": hash_embed("attention mechanism", 128)}
)
for r in results:
print(r["d.title"], "by", r["a.name"])
同じパターンは TypeScript、Go、Java でも機能します(完全なスニペットは README を参照)。
パフォーマンスのハイライト(リポジトリのベンチマークより)
| 操作 | レイテンシ | スループット |
|---|---|---|
| ノードルックアップ(キャッシュ) | 0.13 マイクロ秒 | 7.9 百万操作/秒 |
| 10-NN HNSW(100 万ベクトル) | 0.83 ミリ秒(平均、100% 再現率) | 1.2 千クエリ/秒 |
| 全文 BM25(100 ドキュメント) | 19 マイクロ秒 | 53 千クエリ/秒 |
| 2 ホップグラフトラバーサル(10 万ノード) | 39 マイクロ秒 | – |
一般的な代替手段と比較すると、LatticeDB のノードルックアップはインメモリの RocksDB に匹敵し、ベクトル検索は FAISS のシングルスレッド HNSW を上回り、サーバーベースの Weaviate/Qdrant と同等です。一方、BM25 検索は SQLite FTS5 より約 300 倍高速です。
コア機能
- グラフ – ラベル付きノード/エッジ、プロパティインデックス、ACID トランザクション、MERGE/UNWIND、集計。
- ベクトル検索 – HNSW ANN、設定可能な
M/ef、バルク取り込み、組み込みのハッシュ埋め込みヘルパー、または実際のモデル用の HTTP クライアント。 - 全文 – BM25 転置インデックス、トークン化、ステミング、ファジー Levenshtein 検索。
- Cypher 方言 –
MATCH、WHERE、RETURN、CREATE、DELETE、ORDER BY、LIMITに加え、カスタム演算子<=>(ベクトル距離)と@@(テキストマッチ)。 - 永続性 – ライトアヘッドログ、ポイントインタイムバックアップ、ホットバックアップ、フリーリストの圧縮。
- イベントストリーム – 名前付きチェンジフィードが同じ WAL を共有し、リアクティブエージェントに役立ちます。
- インメモリモード –
:memory:はファイル I/O なしで一時データベースを開きます。
典型的なユースケース
- グラフ関係とセマンティック検索の両方を必要とするローカルナレッジベース、メモアプリ、または個人用検索ツール。
- 単一プロセスがチャンク、埋め込み、メタデータを保存し、それらをまとめてクエリするエージェントメモリ / RAG パイプライン。
- 別のサーバーを実行せずにグラフ中心のアプリケーションをプロトタイピングする(Neo4j や Weaviate の軽量な代替)。
他の選択肢を検討すべき場合
- マルチプロセスまたはネットワークワークロード – LatticeDB は一度に 1 つのライターのみ許可します。
- 純粋に表形式のデータ – リレーショナルデータベース(SQLite、PostgreSQL)の方が簡単かもしれません。
- 大規模な同時書き込みまたは分散スケーリング – クライアントサーバーシステム(例:Neo4j、Qdrant)がより適切です。
次のステップ
- はじめに –
docs/getting_started.mdで CLI、Python、TS、Go、Java のセットアップを説明しています。 - 例 –
examples/cli、examples/go、および言語固有の README を参照して、実行可能なデモを確認してください。 - ベンチマーク –
zig build benchmarkまたは特定のベクトル/グラフ/FTS ベンチマークを実行して、数値を再現します。
LatticeDB は、グラフトラバーサル、ベクトル類似性、全文検索をすべて一緒に処理できる、高速でローカルな単一ファイルストアを求める人向けの専用エンジンです。
関連
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト