jeffhajewski/latticedb
Embedded single-file knowledge graph database with vector search and full-text search for AI/RAG apps
LatticeDB – 嵌入式图+向量数据库
是什么 – LatticeDB 是一个单文件嵌入式属性图数据库,同时存储密集向量和全文索引。它允许本地程序使用单一的 Cypher 风格查询语言,通过关系遍历、向量相似性或 BM25 文本搜索来查询相同数据。
对 AI 为何重要 – 现代 AI 应用(RAG 流水线、代理记忆、本地知识库)通常需要以下三项功能:
- 图结构 用于建模实体及其关系。
- 语义嵌入 用于相似性搜索。
- 关键词搜索 用于精确文本匹配。 LatticeDB 在一个引擎中提供全部三项功能,无需再拼接独立的图数据库、向量数据库和搜索服务。
核心特性(来自 README)
- 单文件存储 – 整个数据库位于一个可移植文件中;无需服务器,无需配置。
- 统一查询层 – Cypher 支持
MATCH、WHERE、RETURN,并新增两个操作符:<=>用于向量属性的余弦距离。@@用于 BM25 全文搜索。
- 原生 HNSW ANN – 可配置参数的近似最近邻搜索,可在 100 万向量上实现 10-NN 查询,延迟低于 1 毫秒,召回率达 100%。
- BM25 倒排索引 – 快速词法搜索(100 个文档约 19 µs),支持模糊匹配。
- ACID 事务 – 预写日志、崩溃恢复、提交/回滚。
- 持久化事件流 – 命名变更流共享同一 WAL,适用于反应式代理。
- 绑定 – 提供 Python、TypeScript/Node、Go 和 Java(JDK 21+)的干净 C API 包装。
- 零配置、单写者模型 – 适用于仅一个进程写入的本地优先应用。
性能亮点(提供基准测试)
| 操作 | 延迟 | 吞吐量 |
|---|---|---|
| 节点查找 | 0.13 µs | 7.9 M ops/s |
| 10-NN 向量搜索(100 万向量) | 0.83 ms(平均) | 1.2 k queries/s |
| 2 跳图遍历(10 万个节点) | 39 µs | – |
| BM25 全文搜索(100 个文档) | 19 µs | 53 k ops/s |
| 这些数字在相同工作负载下与 FAISS、Weaviate、SQLite-FTS5、Neo4j 等流行替代方案相当或更优,且完全嵌入式。 |
安装
- CLI –
curl …/install.sh | bash - Python –
pip install latticedb - Node –
npm install @hajewski/latticedb - Java – 通过 Maven/Gradle 使用
bindings/java模块(需 JDK 21) - Go –
go get后参考bindings/go/README.md
快速示例(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 row in results:
print(row['d.title'], 'by', row['a.name'])
相同模式在 TypeScript、Go 和 Java 中也适用,使用语言特定绑定。
典型用例
- 本地知识图谱 – 笔记、研究论文、引用网络,同时需要语义搜索。
- 代理记忆 / RAG – 存储带嵌入的文本块;代理可通过单个查询检索相关内容。
- 原型开发 – 单机开发时,可替代重型客户端-服务器架构(Neo4j + Weaviate)。
- 嵌入式应用 – 无需服务器的桌面或移动工具,需要图结构数据。
应考虑其他方案的情况
- 需要 并发写入 或网络服务 – LatticeDB 仅支持单写者。
- 工作负载主要为 表格型 – 关系型数据库(SQLite、PostgreSQL)更简单。
- 必须 跨多台机器扩展 – LatticeDB 专为单进程、单机场景设计。
总结 – LatticeDB 是一个真正的开源项目,将图、向量和全文搜索整合为超轻量嵌入式引擎,是本地 AI 增强应用的实用构建模块。
相关
- 项目
- 项目
- 项目
- 项目