在 Rust/WASM 中构建亚毫秒向量数据库

发布: (2025年12月13日 GMT+8 06:41)
3 min read
原文: Dev.to

Source: Dev.to

概览

EdgeVec 是一个高性能向量数据库,完全在浏览器中通过 WebAssembly 运行。它实现了亚毫秒级的搜索时间,使得客户端的语义搜索、RAG(检索增强生成)和推荐在无需服务器的情况下成为可能。

性能

向量数量Float32 搜索量化 (SQ8) 搜索
10 k203 µs88 µs
50 k480 µs167 µs
100 k572 µs329 µs

这些延迟与服务器端方案相当,但完全在客户端运行。

实现细节

算法

EdgeVec 使用 层次化可导航小世界 (HNSW) 图,这正是 Weaviate、Qdrant 等生产级向量数据库所采用的算法。

量化

向量不再以 32 位浮点数存储(768 维 × 4 字节 ≈ 3 KB 每个向量),而是压缩为 8 位整数。这样可实现 3.6 倍的内存缩减,且对准确度的影响极小。

SIMD 优化

  • 本地 (x86_64):AVX2 指令
  • WebAssembly:在支持的情况下使用 simd128

Rust 的可移植 SIMD 用于向量化距离计算,提供了上表所示的亚毫秒查询时间。

构建体积

使用 wasm-pack 编译后,最终包的 gzip 大小仅为 148 KB,足以用于任何 Web 应用。

客户端向量搜索的适用场景

  • 隐私 – 嵌入向量永不离开设备。
  • 延迟 – 零网络往返。
  • 离线 – 可在无网络环境下工作。
  • 成本 – 消除服务器费用。

非常适合浏览器扩展、本地优先应用以及隐私保护的 RAG 流程。

使用示例

import init, { EdgeVec, EdgeVecConfig } from 'edgevec';

await init();

const config = new EdgeVecConfig(768);
const index = new EdgeVec(config);

// Insert a vector
index.insert(new Float32Array(768).fill(0.1));

// Perform a search
const results = index.search(query, 10);
// results: [{ id: 0, score: 0.0 }, ...]

资源

  • GitHub:
  • npm: npm install edgevec

Alpha 版发布 – 欢迎反馈!

Back to Blog

相关文章

阅读更多 »