我用 Rust 手写了一个零依赖、兼容 RESP2 的迷你向量数据库
先说清楚它是什么:用 Rust 写的迷你向量数据库,直接说 RESP2 协议,所以你可以用 redis-cli 跟它对话。
仓库:github.com/JingYu-create520/vredis (MIT)
Cargo.toml 里的 [dependencies] 是空的。RESP2 解析、编码、WAL + 快照持久化、距离函数、索引全部自己手写,没有任何外部 crate。
cargo run
redis-cli -p 6379
VADD faces 3 1.0 0.0 0.0 -> "0"
VSEARCH faces 1 1.0 0.0 0.0 -> id 0, distance 0
代价也说清楚,别拿去和成熟方案比:
- 默认是暴力搜索,HNSW 要设 VREDIS_HNSW=1 开启,而且是我自己手写的,别和真正的 ANN 库比性能。
- 命令只有 SET / GET / VADD / VSEARCH,连 VDEL 都还没有。
- 没有优雅退出,进程是直接死的;持久化靠 WAL + 快照,能扛重启,别的扛不住。
- v0.5.0,一个人的周末项目。
为什么手写协议:想在 Rust 里加向量检索,就得先起一整个服务,我不想要这个负担。写下来最大的感受是,RESP2 解析反而是简单的那一半,索引才是麻烦的那一半。
有问题可以问我,尤其是 HNSW 那块——那是我最没底的部分。
关于 LearnKu
推荐文章: