< 返回版块

Mike Tang 发表于 2026-01-25 12:53

SatoriDB - 从零开始构建的向量数据库

一位开发者分享了他开发的 satoriDB 项目,这是一个用 Rust 编写的嵌入式向量数据库。

核心理念

  • 模仿 SQLite 的使用体验:不需要运行独立服务器,只需添加到 Cargo.toml 即可使用
  • 解决现有向量数据库(如 Qdrant、Milvus、Weaviate)需要 Docker 容器、网络配置、HTTP/gRPC 序列化等复杂部署问题

技术架构亮点

  1. 双层设计

    • 内存层:使用 HNSW 索引的量化质心作为路由器
    • 磁盘层:存储完整精度的 f32 向量,支持并行扫描
  2. 性能优化

    • 基于 Glommio 的无共享、每核心一线程架构,减少上下文切换和互斥锁竞争
    • 自定义 WAL(Walrus),支持 Linux 上的 io_uring 异步批量 I/O
    • L2 距离计算使用手写的 AVX2、FMA 和 AVX-512 指令集
    • 使用 RocksDB 处理元数据存储
  3. 开发中功能:正在集成对象存储支持

项目地址:https://github.com/nubskr/satoriDB

https://old.reddit.com/r/rust/comments/1qm0vsq/i_built_sqlite_for_vectors_from_scratch/

Rust 闭包总结

这段代码演示了 Rust 闭包的所有权和移动语义

关键点:

  1. 值捕获(Capture by Value)

    • 闭包通过 drop(last_word) 强制按值捕获变量 last_word
    • 所有权从外部作用域移动到闭包内部
  2. 所有权转移的影响

    • 闭包定义后,外部无法再访问 last_word(已被移动)
    • 调用闭包后,last_word 在闭包内被 drop,彻底销毁
  3. 闭包只能调用一次

    • 因为闭包内部消费了 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

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页