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 流水线、代理记忆、本地知识库)通常需要以下三项功能:

  1. 图结构 用于建模实体及其关系。
  2. 语义嵌入 用于相似性搜索。
  3. 关键词搜索 用于精确文本匹配。 LatticeDB 在一个引擎中提供全部三项功能,无需再拼接独立的图数据库、向量数据库和搜索服务。

核心特性(来自 README)

  • 单文件存储 – 整个数据库位于一个可移植文件中;无需服务器,无需配置。
  • 统一查询层 – Cypher 支持 MATCHWHERERETURN,并新增两个操作符:
    • <=> 用于向量属性的余弦距离。
    • @@ 用于 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 等流行替代方案相当或更优,且完全嵌入式。

安装

  • CLIcurl …/install.sh | bash
  • Pythonpip install latticedb
  • Nodenpm install @hajewski/latticedb
  • Java – 通过 Maven/Gradle 使用 bindings/java 模块(需 JDK 21)
  • Gogo 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 增强应用的实用构建模块。

相关

  • 项目
  • 项目
  • 项目
  • 项目