LatticeDB:一个嵌入式单文件图数据库,支持向量和全文搜索

LatticeDB 是一个嵌入式、单文件的属性图数据库,专为单机上的关系密集型工作负载而设计。它将图遍历、HNSW 向量相似性搜索和 BM25 全文搜索整合到一个查询引擎中,无需为语义、文本和关系型数据分别使用独立的数据库。

图、向量与文本的统一查询层

LatticeDB 允许开发者在单一查询语言中通过关系、语义和文本查询数据。这种统一在 Graph RAG 和代理记忆系统中尤为有用,因为一个查询可能需要查找语义匹配项、遍历到相关实体,并根据特定文本进行过滤。

Cypher 查询语言支持

LatticeDB 实现了 Cypher 查询语言的一个子集,支持以下关键操作:

  • 遍历MATCHWHERERETURN 和可变长度路径(例如 *1..3)。
  • 修改CREATEDELETESETREMOVEMERGE
  • 搜索操作符<=> 操作符用于向量距离,@@ 操作符用于全文搜索。
  • 数据处理WITHUNWIND 以及聚合操作如 countsumavgminmaxcollect

集成的搜索能力

  • 向量搜索:使用分层可导航小世界(HNSW)近似最近邻搜索,支持可配置的 Mef 参数。支持内置哈希嵌入,并提供对 Ollama 和 OpenAI 的 HTTP 客户端。
  • 全文搜索:采用基于 BM25 排名的倒排索引,支持分词、词干提取和通过可配置的 Levenshtein 距离实现的模糊搜索。

性能基准测试

LatticeDB 使用 Zig 语言编写,针对低延迟本地操作进行了优化。在 Apple M1(单线程)上进行的基准测试显示了以下性能特征:

核心操作延迟

操作 延迟 吞吐量
节点查找 0.13 µs 7.9M 次/秒
节点创建 0.65 µs 1.5M 次/秒
边遍历 9 µs 111K 次/秒
全文搜索(100 个文档) 19 µs 53K 次/秒
10-NN 向量搜索(100 万个向量) 0.83 ms 1.2K 次/秒

向量搜索扩展性

在 100 万个向量(128 维余弦向量)规模下,LatticeDB 实现了 0.83 ms 的平均延迟,且 100% 的召回率@10。搜索延迟呈次线性扩展(O(log N))。

图遍历 vs. SQLite

LatticeDB 在图遍历方面显著优于 SQLite 的递归 CTE。在一个包含 10 万个节点和 50 万个边的社交网络图中,2 跳遍历在 LatticeDB 中耗时 38.7 µs,而在 SQLite 中为 548.3 µs(提速 14 倍)。对于更深的遍历(深度 50),提速可达 2,819 倍。

架构与运行模型

LatticeDB 遵循“本地优先”理念,类似于 SQLite 的操作简洁性。

  • 存储:整个数据库存储在一个单一可移植的文件中。

  • 并发:采用嵌入式单写入者模型。一个进程独占文件,因此不适合多应用并发写入。

  • 持久性:使用预写日志(WAL)实现崩溃恢复,并支持 ACID 事务,具备提交/回滚能力。

  • 事件流:引擎包含持久化的命名流和内置的图变更流,与图写入共享相同的事务/WAL 路径。

  • 绑定:尽管核心使用 Zig 编写,LatticeDB 提供官方的 Python、TypeScript/Node.js 和 Go 绑定。

使用场景分析

适用场景

  • 本地知识工具:需要图结构但无需独立服务器开销的应用程序。
  • 代理记忆与 RAG:结合语义搜索与关系遍历的流水线。
  • 本地连接数据:管理引用图、实体图或个人笔记。
  • 本地开发:在单台机器上对 Neo4j 或 Weaviate 进行原型设计。

不推荐使用 LatticeDB 的情况

  • 多写入者需求:如果多个应用程序需要同时写入同一数据库,必须使用客户端-服务器数据库(如 PostgreSQL 或 Neo4j)。
  • 表格型数据:对于自然适合行列表结构的数据(如销售记录),关系型数据库仍更高效。
  • 分布式扩展:LatticeDB 仅限于单机使用,不支持跨集群的分片或复制。
  • 完整 Cypher 兼容性:目前不支持 OPTIONAL MATCHCALL 存储过程。

社区反馈

Hacker News 上的用户指出该项目表现出色,且“何时不应使用”的文档非常实用。但也有用户报告基准测试结果存在差异。一位用户(@adsharma)在 M4 Mac Mini 上测试时发现,尽管 LatticeDB 在遍历方面仍优于 SQLite,但提速倍数低于官方基准(例如 1 跳遍历仅为 2.8 倍,而非官方的 36 倍)。

其他社区讨论还提到了潜在的替代方案,以及与其他新兴“本地优先”图工具(如 LadybugDB、SparrowDB 和 DuckPGQ)的比较。

Sources

相关

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