我用 Rust 手写了一个零依赖、兼容 RESP2 的迷你向量数据库

AI摘要
【知识分享】介绍了一个用 Rust 手写的迷你向量数据库 vredis,零依赖实现 RESP2 协议、WAL 与快照持久化、距离函数及索引,支持 redis-cli 交互,命令含 SET/GET/VADD/VSEARCH。作者说明默认暴力搜索,HNSW 需环境变量开启且性能有限,项目为 v0.5.0 个人周末作品,并邀请就 HNSW 部分提问。

先说清楚它是什么:用 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 那块——那是我最没底的部分。

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!