各位 Rust 社区的朋友好。我们发布了 MoteDB v0.12.1,一个用 Rust 写的嵌入式多模态数据库,欢迎试用和拍砖。
一句话定位
AI 原生嵌入式多模态数据库,面向具身智能(机器人、AR 眼镜、工业机械臂):单库文件 + WAL,列式存储引擎,ACID 事务,向量检索、BM25 全文、空间索引、时序优化装在一个库里,cargo add / pip install 即用,无外部服务依赖。
- GitHub:https://github.com/motedb/motedb (MIT,pre-1.0)
- Rust:
cargo add motedb(crates.io/motedb) - Python:
pip install motedb-python(PyPI,macOS/Linux 四平台 wheel)
为什么做它
边缘设备上的感知数据天然是多模态的:一路时间戳、若干传感器列、图像/语音 embedding、诊断文本、位置点。现状往往是一套 SQLite/duckdb + 一个 FAISS + 一个 ES/MeiliSearch,三个进程三套持久化,崩溃恢复和事务一致性各管各的。MoteDB 想把这件事收进一个嵌入式库:列存底座上长出四类索引,共享同一套 MVCC/ACID 与崩溃恢复,for_edge() 一档配置即适配小内存设备。
v0.12 的重点更新
1. 混合检索(hybrid_search):同一查询里 BM25 全文列表与向量 KNN 列表按 Reciprocal Rank Fusion 融合,RRF 免掉两套引擎的分数标定,两列表都命中的文档自然浮顶。Rust 与 Python API 同形:
rows = db.hybrid_search(
text_index="docs_body", text_query="轴承 异响",
vector_index="docs_emb", query_vector=q, k=10)
2. Python 列式互操作:query_arrow() 直接产出 pyarrow.Table(VECTOR 列映射为 Arrow 规范的 fixed_size_list<float32>),query_pandas 一步到 DataFrame;insert_arrays 吃 numpy 批量装载(197K rows/s 耐久档),INSERT ... SELECT 走同一批量管线(实测 1.6M rows/s)。
3. 一波性能战役(均带可复现基准与对照引擎):
| 负载 | 结果 |
|---|---|
1M 行 ORDER BY ts DESC LIMIT 10 |
1.2s → 1.76ms(680×,快于 DuckDB 全扫) |
| 1M 行 TopK | 9.2 → 1.5ms(与 DuckDB 1.25ms 视同追平) |
| DiskANN 尾部延迟 | p99 30ms → 1.5ms(同 recall 档对 FAISS Flat 快 9×) |
| scan-UPDATE/DELETE 谓词下推 | 112.6K rows/s,反超 SQLite(110K,同耐久口径) |
| 时序范围聚合 / 空间 bbox | p50 0.004ms / 0.001ms(对照 SQLite/DuckDB 快两个数量级) |
4. 正确性优先的文化:以 SQLite 作 oracle 的差分对拍是常驻回归(这次修掉的事务聚合漏行、过滤向量检索漏结果、事务内 FTS 读己之写等 4 个 bug 全部由差分测试实抓);当前全量测试 239 个二进制 / 3957 例,clippy --all-targets 0 告警,性能有机器无关的比值预算门禁防复杂度回退。
Rust 侧快速上手
use motedb::{Database, QueryResult};
let db = Database::create("hello.mote")?;
db.execute("CREATE TABLE ev (id INT PRIMARY KEY, ts TIMESTAMP,
emb VECTOR(384), note TEXT)")?;
db.execute("INSERT INTO ev VALUES (1, '2026-10-07T10:00:00',
'[0.1, 0.2, ...]', 'motor ok')")?;
// 向量近邻 + 全文 + 空间都是 SQL 里的普通谓词
let r = db.execute("SELECT id, note FROM ev ORDER BY emb <->
'[0.1, 0.2, ...]' LIMIT 5")?;
⚠️ 升级注意(v0.12 破坏性变更)
MATCH 多词默认语义 OR → AND(对齐 SQLite FTS5)。需要 OR 请显式写 MATCH 'a OR b'。
已知限制(诚实清单)
- 事务内未提交 INSERT 对
MATCH快路径暂不可见(读己之写已覆盖扫描/聚合/点查) - LATEST BY 大表(>1M 行)性能待优化(0.12.x 计划)
executemany与 SQLite 差 2.4-2.7×(Python 过桥开销,批量 API 可达 189-457K rows/s)- SQL 面与多语言 FFI 仍在快速演进,API 未冻结(pre-1.0)
完整变更与性能档案见 CHANGELOG 与 BENCHMARK.md。
欢迎参与
具身智能设备上的数据层还有很多硬仗:字典编码聚合、段级 min/max 剪枝、时序段重写……欢迎提 issue / PR,也欢迎带你们的真实负载来对拍。
—— MoteDB 团队
评论区
写评论还没有评论