SatoriDB - 从零开始构建的向量数据库
一位开发者分享了他开发的 satoriDB 项目,这是一个用 Rust 编写的嵌入式向量数据库。
核心理念
- 模仿 SQLite 的使用体验:不需要运行独立服务器,只需添加到 Cargo.toml 即可使用
- 解决现有向量数据库(如 Qdrant、Milvus、Weaviate)需要 Docker 容器、网络配置、HTTP/gRPC 序列化等复杂部署问题
技术架构亮点
-
双层设计:
- 内存层:使用 HNSW 索引的量化质心作为路由器
- 磁盘层:存储完整精度的 f32 向量,支持并行扫描
-
性能优化:
- 基于 Glommio 的无共享、每核心一线程架构,减少上下文切换和互斥锁竞争
- 自定义 WAL(Walrus),支持 Linux 上的 io_uring 异步批量 I/O
- L2 距离计算使用手写的 AVX2、FMA 和 AVX-512 指令集
- 使用 RocksDB 处理元数据存储
-
开发中功能:正在集成对象存储支持
项目地址:https://github.com/nubskr/satoriDB
https://old.reddit.com/r/rust/comments/1qm0vsq/i_built_sqlite_for_vectors_from_scratch/
Rust 闭包总结
这段代码演示了 Rust 闭包的所有权和移动语义:
关键点:
-
值捕获(Capture by Value)
- 闭包通过
drop(last_word)强制按值捕获变量last_word - 所有权从外部作用域移动到闭包内部
- 闭包通过
-
所有权转移的影响
- 闭包定义后,外部无法再访问
last_word(已被移动) - 调用闭包后,
last_word在闭包内被 drop,彻底销毁
- 闭包定义后,外部无法再访问
-
闭包只能调用一次
- 因为闭包内部消费了
last_word,闭包本身也变成了FnOnce类型 - 第二次调用会报错:
use of moved value
- 因为闭包内部消费了
核心概念:
展示了 Rust 的 所有权系统 如何在闭包中工作,以及 FnOnce trait(只能调用一次的闭包)的实际应用场景。
https://antoine.vandecreme.net/blog/rust-closures/
使用Burn机器学习框架构建的离线机器学习应用:植物病害检测AI
一位开发者分享了使用Rust构建的植物病害检测AI项目,主要亮点如下:
核心数据
- 应用大小:仅24MB(相比之下PyTorch版本需要7.1GB)
- 推理速度:
- 桌面GPU (RTX 3060):0.39毫秒/帧,达2,579 FPS
- iPhone 12:约80毫秒
- 功能:识别38种植物病害,使用30%标注数据进行半监督学习
技术选择
为什么用Rust而非Python?
- 目标用户是农民,需要在现有设备上离线运行
- PyTorch问题:7GB依赖、3秒冷启动、安装复杂
- Burn框架优势:编译成单一二进制文件,支持多平台(GPU/CPU/浏览器)
技术实现
- 框架:使用Burn机器学习框架
- 模型:标准CNN架构(4个卷积块:32→64→128→256通道)
- 半监督学习:通过伪标签技术,用30%标注数据达到相当于60%全标注数据的准确率
- 部署:使用Tauri 2.0打包成原生iOS应用,在iPhone上直接运行Rust代码
主要收获
- Burn框架已可用于生产环境
- Tauri移动端表现优秀,一套代码跨平台
- WASM性能超出预期
- 编译时间较长(release版本5分钟以上)
项目提供了完整的源代码和技术博客链接。
https://old.reddit.com/r/rust/comments/1qlpaj5/built_a_24mb_offline_ml_app_with_burn_tauri_runs/
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论