< 返回版块

motedb 发表于 2026-10-07 15:10

Tags:数据库,AI,IOT,嵌入式

各位 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 团队

评论区

写评论

还没有评论

1 共 0 条评论, 1 页