Minigraf:Rust 编写的嵌入式双时态图数据库

概述

Minigraf 是一款专为 AI 智能体、移动应用和浏览器环境设计的自包含嵌入式图数据库。它被定位为“关联数据的 SQLite”,提供了一种支持 Datalog 查询和双时态时间旅行模型的单文件存储系统,允许用户查询数据在事务时间或有效时间任意特定点上的状态。

核心技术能力

双时态时间旅行

Minigraf 实现了双时态模型,其中每个事实都由两个不同的时间维度进行追踪:

  • 事务时间 (Transaction Time):事实被记录到数据库中的时间。
  • 有效时间 (Valid Time):事实在现实世界中成立的时间。

这种架构允许在不丢失历史记录的情况下进行追溯性更正。例如,用户可以在保留原始记录的同时更正输入错误的值,从而实现对系统在任何给定时刻所持观点的审计追踪。

Datalog 查询语言

Minigraf 使用 Datalog 而非 SQL 或 Cypher 进行图遍历。该项目认为 Datalog 在处理图数据方面更具优势,因为它在设计上支持递归,使得多跳遍历变得自然。此外,其统一的语法(由 [?e :attr ?v] 等简单模式组成)使其与 LLM 生成的查询高度兼容。

嵌入式架构

Minigraf 被设计为直接嵌入到应用程序中,而不是作为独立服务器运行。关键的架构约束包括:

  • 单文件存储:数据存储在单个 .graph 文件中。
  • 规模目标:针对 100 万个节点以下的数据集进行了优化。
  • 零配置:通过简单的 Minigraf::open("data.graph") 调用即可初始化数据库。
  • 非分布式:Minigraf 在设计上不支持集群、分片或复制;每个实例拥有自己的本地文件。

性能与持久性

根据目前的基准测试,在 100 万个事实的情况下,点查询耗时在 4.3 到 4.5 秒之间。系统对有界模式使用选择性 B+ 树查找,对全属性扫描使用 O(N) 复杂度。

为了确保数据完整性,Minigraf 采用了两种持久化模式:

  • SyncMode::Full:每次写入都会立即执行 fsync(默认)。
  • SyncMode::Normal:用于批量加载或迁移以提高吞吐量,尽管 checkpoint() 仍会触发无条件的 fsync。

文件支持的数据库强制要求每个事实的最大序列化大小为 4,080 字节,而内存数据库则没有此限制。

平台支持与绑定

Minigraf 使用 Rust 编写(要求 1.89 或更高版本),并提供不同层级的语言绑定:

平台 层级 包/方法
Rust (原生) 1 minigraf on crates.io
Python 1 minigraf on PyPI
浏览器 WASM 2 @minigraf/browser on npm (基于 IndexedDB)
WASI 2 @minigraf/wasi on npm
Node.js 2 minigraf on npm
Java/Android 2 Maven Central (Android 使用 .aar)
iOS/macOS 2 Swift Package Manager (.xcframework)
C / FFI 2 C 头文件和共享库

一级绑定经过全面测试并与核心版本同步发布;二级绑定为实验性,仅经过冒烟测试。

应用场景

AI 智能体

Minigraf 可作为 AI 智能体的时态记忆层。它允许智能体存储信念,在不擦除历史的情况下撤销或更正它们,并重放过去的状态以审计特定决策背后的推理过程。这在“GraphRAG”模式中补充了向量存储,其中向量存储处理相似性搜索,而 Minigraf 处理关系和时态查询。

移动应用

双时态模型支持需要追溯性更正的离线优先应用。原生的 Kotlin 和 Swift 绑定允许集成到 Android 和 iOS 应用中,而无需开发者编写 Rust 代码。

社区讨论与反方观点

虽然该项目强调了其独特的功能组合,但 Hacker News 上的一些社区成员质疑在这些用例中引入新的查询语言和数据库的必要性:

"Existing cypher based databases which support typed properties (including timestamps) on relationship tables can handle this use case just fine." — @handle

其他人则质疑“实体时态多元宇宙”在个人生产力工具中的实际应用,认为标准的 SQLite 实现可以在特定应用(如代码分析)中处理大规模(例如 1000 万条边)的图数据。

Sources

相关

  • 项目
  • 项目
  • Dispatch
  • 项目
  • 项目