marsmodule/MarsmoduleDB
GitHub: marsmodule/MarsmoduleDB
一款全局禁用 unsafe 代码的纯 Rust 实验性数据库引擎,实现与 SQLite 二进制文件格式兼容,并兼作 agent 团队开发模式的公开验证项目。
Stars: 0 | Forks: 0
# MarsmoduleDB — 兼容 SQLite 的 Rust 数据库引擎与 VDD 验证项目
MarsmoduleDB 是一个实验性的、独立且兼容 SQLite 的嵌入式数据库
引擎,完全使用纯 Rust 编写:不包含 C,没有 FFI,全局使用 `#![forbid(unsafe_code)]`,
实现字节兼容的文件 I/O,并提供对 cargo 友好的嵌入 API。已发布的
crate 名为 `sqlite-rust`。
它同时也是使用 Marsmodule VDD Plugin 工作流进行基于 agent 团队的软件开发的一个公开验证项目。该项目刻意追求真实而非玩具级别的规模:其存储、SQL 执行、兼容性测试、Fuzzing、
文档以及审查证据均是在一个要求严苛的数据库系统上开发出来的。
## 项目存在的原因
MarsmoduleDB 有三个目标:
1. 使用
纯 Rust 构建一个实用、自由授权且兼容 SQLite 的嵌入式数据库引擎。
2. 在一个严肃且长期运行的软件系统(而非玩具示例)上,
验证基于 agent 团队的开发模式。
3. 发布透明的工程证据——兼容性测试、Fuzzing、
架构说明和局限性——使得该开发方法能够通过真实的工件来评估。
## 项目状态一览
| 领域 | 当前状态 |
| --- | --- |
| 核心存储 | 兼容 SQLite 的 page/header/record 处理,B-tree 读取,多级 INSERT 增长,溢出页,freelist 重用,rollback journal 恢复 |
| SQL 执行 | SELECT, joins, aggregates, subqueries, CTEs, window functions, 标量/数学函数,type affinity,collation 支持 |
| DML 和 DDL | INSERT, UPDATE, DELETE, CREATE/DROP TABLE, CREATE/DROP INDEX, CREATE/DROP VIEW, ALTER TABLE ADD COLUMN, constraints, 冲突处理, UPSERT |
| 兼容性测试 | 写入操作与 `/usr/bin/sqlite3 3.45.1` 进行差异化测试,并使用 `PRAGMA integrity_check` 进行验证 |
| Fuzzing | `cargo-fuzz` 目标覆盖 SQL 解析和兼容 SQLite 的字节解码;崩溃会被转化为稳定的回归测试 |
| 生产就绪性 | 实验性。在生产使用前,请评估兼容性、持久性、并发性和安全性需求 |
| VDD 验证价值 | 为 Marsmodule VDD Plugin agent 团队工作流提供真实世界的验证目标 |
## 状态
一个纯 Rust、二进制兼容的 SQLite 文件格式移植版本——没有 C,没有 FFI,
全局使用 `#![forbid(unsafe_code)]`。每一次写入都会与
真实的 `/usr/bin/sqlite3 3.45.1` 进行差异化测试,并使用 `PRAGMA integrity_check` 进行验证。
当前功能:
**文件格式与存储**
- Page 级 I/O(Pager,LRU page 缓存);字节兼容的数据库 header 和 record
- B-tree 叶子节点 + 内部节点读取;有序的多叶表扫描
- INSERT 时的多级 B-tree 增长(通过追加式 spine 平衡实现任意深度/大小)
- 超大 TEXT/BLOB 的溢出页;freelist 页面重用
- 带有崩溃恢复的 Rollback journal —— `BEGIN` / `COMMIT` / `ROLLBACK` 事务
**SQL —— 查询 (SELECT)**
- 投影;带有布尔三值逻辑(`AND` / `OR` / `NOT` / 括号)的 `WHERE`
- `ORDER BY`(多键,ASC/DESC);`LIMIT` / `OFFSET`
- `GROUP BY` / `HAVING`;聚合函数(`COUNT` / `SUM` / `MIN` / `MAX` / `AVG` / `group_concat`)
- `INNER JOIN` 和 `LEFT [OUTER] JOIN`;FROM/JOIN 表别名(`FROM t [AS] x`、`JOIN u [AS] y`)以及自连接
- 标量子查询;基于字面量列表或子查询的 `IN` / `NOT IN`
- 派生表 —— `FROM`/`JOIN` 中的子查询(`FROM (SELECT …) [AS] x`),带有可选别名
- 非递归和递归 CTE(`WITH [RECURSIVE] … AS (SELECT …) SELECT …`)
- Window 函数 —— `ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`,以及带有 `OVER ([PARTITION BY …] [ORDER BY …])` 和默认 frame 的聚合 window 函数(`COUNT`/`SUM`/`MIN`/`MAX`/`AVG`);显式 frame、LAG/LEAD/NTILE、命名 windows、FILTER 暂缓支持
**SQL —— DML 和 DDL**
- `INSERT` —— 多行,列 `DEFAULT`,`INTEGER PRIMARY KEY` rowid 别名
- 带有增量索引维护的 `UPDATE` 和 `DELETE`
- `CREATE TABLE` / `DROP TABLE`;`CREATE [UNIQUE] INDEX` / `DROP INDEX`
- `CREATE VIEW` / `DROP VIEW`;`ALTER TABLE ADD COLUMN`
- `CREATE VIRTUAL TABLE … USING vec0(embedding float[N])` —— 原生、纯 Rust 的 `vec0` 向量存储:float32 向量以小端序 IEEE-754 `f32[N]` BLOB 形式存储在底层的 rowid 表中;支持 `INSERT`(JSON `'[…]'` 文本或 `f32` BLOB)、`DELETE`(包括重新索引形式 `DELETE FROM v WHERE rowid IN (SELECT … )`)以及读回,其行为与真实的 `sqlite-vec` 0.1.9 扩展相匹配
- vec0 KNN 搜索 —— `SELECT rowid, distance FROM v WHERE embedding MATCH '[…]' AND k = ?` 返回按欧几里得 (L2) 距离升序排列的 `k` 个最近向量,并作为 `distance` 列呈现,其行为与 `sqlite-vec` 0.1.9 相匹配(L2 kernel 使用融合乘加运算以实现与基准预言机完全一致的比特级对齐)。查询向量可以是 JSON `'[…]'` 文本、`f32` BLOB 或 `?` 参数;约束可以是 `k = ?` 或 `LIMIT`;如果 `MATCH` 缺少这两者,则会产生类型化的错误。支持 rowid 连接 `… FROM v JOIN chunks c ON c.id = v.rowid ORDER BY v.distance`。维度不匹配或格式错误的查询向量会产生类型化的 `ExecError`,而绝不会引发 panic
- **Vector Phase 1 —— 已完成。** 真实消费者 的端到端 vec0 索引 → 搜索 → 重新索引 → 搜索工作负载在 MarsmoduleDB 上与 `sqlite-vec` 0.1.9 预言机完全收敛:schema 创建、在单个事务中扩展索引、KNN 连接搜索以及基于 `IN (subquery)` 删除的重新索引,全部与预言机实现逐位匹配 (REQ-067)
- CHECK constraints —— 列级和表级,在 INSERT/UPDATE 写入前强制执行(NULL/Unknown 通过;仅 FALSE 拒绝;产生类型化的 `CheckConstraintViolation`)
- UNIQUE 和 PRIMARY KEY 列/表约束 —— 自动创建 `sqlite_autoindex__