为具身 AI 工作负载而生
不是通用嵌入式数据库的裁剪版——每个能力都对着机器人数据的真实形状设计。
多模态原生
VECTOR(n) 向量列带索引 KNN、BLOB 字节等值、全文检索与 TIME_BUCKET 时序聚合——同一个 SQL 引擎,同一个事务视图。
三种形态一种体验
采集期是高性能目录,运输期是单文件快照(CRC 校验 + zstd),部署期是只读容器直开——EXPORT DB 一条 SQL 串联。
嵌入式零运维
无服务、无端口、无独立进程。库文件即数据库,索引损坏自动从源数据重建,打开即用。
断电安全内核
temp+fsync+rename 原子发布、WAL 组提交、孤儿段领养、崩溃注入与差分模糊测试持续验证——边缘设备的拔电是常态而非异常。
五平台预构建
macOS (arm64/x64)、Linux (x64/arm64)、Windows 的官方二进制直接安装——交叉编译与冒烟测试在 CI 里逐平台验证。
舰队友好
快照增量重导出、只读容器多读者共存、单调行号空间——为"一台指挥、百台采集"的机器人舰队同步而设计。
一套 SQL,查询所有模态
向量、时序、全文、二进制不是四个数据库——是一张表里的四种列。真实的查询长这样:
-- 位姿表中语义最近的 5 条 (索引加速) SELECT ts, sid FROM poses ORDER BY emb <-> [0.1, 0.2, 0.3, 0.4] LIMIT 5;
-- 60 秒窗口聚合 + 自动 TTL 过期 SELECT TIME_BUCKET('60s', ts) AS bucket, AVG(v), MAX(v) FROM poses GROUP BY bucket; ALTER TABLE poses SET TTL = '30d';
-- 混合检索: 全文 (BM25) × 向量 (KNN) RRF 融合 db.hybrid_search( "docs_body", # 全文索引 "joint calibration", # 文本查询 "docs_emb", # 向量列 [0.1, 0.4, 0.2, 0.9], k=10)
-- BLOB 字节等值 + MCAP 一次性导入 SELECT id FROM frames WHERE payload = X'DEADBEEF'; IMPORT MCAP 'session_2026_10_17.mcap';
-- 整库 → 单文件 (CRC 校验 + zstd) EXPORT DB TO 'fleet.mote' COMPRESSED; -- 部署侧: 只读打开, 多读者共存 db = Database.open_readonly("fleet.mote")
// 以上均为真实语法 — 与仓库测试同源, 非示意
数据的三种形态,一条流水线
具身智能的数据要经历采集、运输、部署。每个阶段对磁盘形态的要求不同——MoteDB 为每一段给最优解,用一条 SQL 串联。
高性能目录
机器人本体持续写入。temp+rename 原子发布 + WAL 组提交,拔电安全;全局清单 + 惰性文件,固定开销恒定。
单文件快照
一条 SQL 打包整库。逐文件 CRC 校验、可选 zstd、弱网续传友好。
只读容器
固件预置一个文件,打开即查。全部写路径拒绝,多读者共存,地图与知识库随版本分发。
为什么不用"拼一个"
向量靠 SQLite 扩展、时序靠手写 SQL、全文再装一个库——三个存储、三种一致性、三份运维。MoteDB 把向量数据库、时序数据库和全文检索放回同一张表。
| 能力 | MoteDB | SQLite + 扩展拼装 | 文件 + 自研脚本 |
|---|---|---|---|
| 向量 KNN (索引加速) | ● | ▲ 扩展 | — |
| 时序语义 (TIME_BUCKET / TTL / LATEST BY) | ● | ▲ 手写 SQL | — |
| 全文检索 (BM25 + snippet) | ● | ● FTS5 | — |
| 多模态同一事务视图 | ● | — 跨扩展无事务 | — |
| 单文件快照 (CRC + zstd + 增量) | ● | — 手动拷贝 | — |
| 只读容器部署 (多读者) | ● | — | — |
| 断电安全 (崩溃注入验证) | ● | ▲ 取决于实现 | ▲ 取决于实现 |
← 左右滑动查看 →
* 对比基于各产品公开能力与本仓库可复现验证, 2026-10。● 完整支持 · ▲ 部分/需组装 · — 不支持
为 AI 栈而设计,也让 AI 读懂
具身智能的下游就是 AI:语义检索、训练管线、智能体。MoteDB 把这些做进产品,而不是留给用户拼装。
混合检索 (RRF 融合)
BM25 关键词 × 向量语义,Reciprocal Rank Fusion 一次调用完成——语义查询开箱即用,无需自己实现排序融合。
Arrow 直通训练管线
query_arrow() 返回规范 pyarrow.Table——向量列为 FixedSizeList<float32>,零拷贝对接 PyTorch/DataLoader。
对 AI 可读
llms.txt + JSON-LD 结构化数据 + 机器可读能力清单——LLM、Agent、AI 搜索引擎都能准确回答"MoteDB 能不能做 X"。
# 语义混合检索: BM25 × KNN, RRF 融合 res = db.hybrid_search("docs_body", "joint calibration", "docs_emb", [0.1,0.4,0.2,0.9], k=10) # 结果直通 Arrow → 训练管线零转换 tbl = db.query_arrow("SELECT ts, sid, emb FROM poses") # tbl 列向量即 FixedSizeList<float32> — 可直接喂给 DataLoader
5 分钟:从 MCAP 到可查询的时序库
- 建表即声明多模态:TIMESERIES(ts) 时序语义、VECTOR(4) 向量列
- 参数化写入,预编译语句缓存
- 向量 KNN 用熟悉的 <-> 算符,索引加速
- 重开自动恢复:WAL 回放 + 段迁移 + 索引自愈
# pip install motedb-python from motedb import Database db = Database("robot.mote") db.execute("CREATE TABLE poses ( ts TIMESTAMP, sid INT, emb VECTOR(4) ) TIMESERIES(ts)") db.executemany("INSERT INTO poses VALUES (?,?,?)", poses) # 向量 KNN:最近的 5 个位姿 hits = db.query("SELECT ts, sid FROM poses ORDER BY emb <-> [0.1,0.2,0.3,0.4] LIMIT 5") # 运输:整库打成单文件快照 db.execute("EXPORT DB TO 'fleet.mote'")
为边缘设备写的每一行, 都按内核标准验证
嵌入式的故障不可回滚、不可远程修复。所以发布前要过的是这些——不是营销数字, 是仓库里可复现的门禁。