Zvec:阿里巴巴开源的嵌入式向量数据库,毫秒级搜索十亿向量

知识点总结

摘要

Zvec 是阿里巴巴开源的进程内向量数据库,无需独立服务器,直接嵌入应用即可运行。它在阿里集团内部经过生产环境验证,支持稠密向量、稀疏向量、全文检索和混合查询,能在毫秒级别完成十亿规模的相似性搜索,同时保证数据持久化安全。

核心优势

极致性能,开箱即用

Zvec 的设计哲学是”简单即强大”——一行 pip install zvec 就能启动,不需要配置服务、不需要守护进程、不需要运维负担。相比 Milvus、Weaviate 等需要独立部署的向量数据库,Zvec 作为库直接嵌入进程,省去了网络 RTT,延迟极低。

多模式检索一体化

v0.5.0 版本将三种检索能力整合进一个 MultiQuery 接口:

  • 稠密向量搜索:基于语义嵌入的相似度召回
  • 稀疏向量搜索:保留词频信息的关键词敏感召回
  • 全文检索(FTS):原生支持自然语言和结构化表达式,无需 Elasticsearch

三者可以在一次查询中融合,实现真正意义上的混合检索。

数据安全有保证

内置预写日志(WAL)机制,即使进程崩溃或断电,已写入的数据也不会丢失。多进程并发读,单进程独占写,并发模型清晰可预期。

跨平台多语言生态

语言安装方式
Pythonpip install zvec
Node.jsnpm install @zvec/zvec
Go官方 SDK zvec-go
Rust官方 SDK zvec-rust
Dart/Flutterflutter pub add zvec

支持 Linux(x86_64 / ARM64)、macOS(ARM64)、Windows(x86_64),以及 RISC-V。

面向人群

  • AI 应用开发者:构建 RAG 管道、语义搜索、推荐系统时需要嵌入式向量存储
  • 独立开发者 / 原型阶段:不想为向量检索引入额外运维复杂度
  • 边缘计算 / 嵌入式场景:需要在笔记本、CLI 工具、边缘设备上运行向量检索
  • Python / Node.js 全栈工程师:习惯”库”级别 API 而非”服务”级别集成

快速上手

Python — 五分钟跑通相似度搜索

pip install zvec
import zvec

# 定义 collection schema
schema = zvec.CollectionSchema(
    name="articles",
    vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 768),
)

# 创建并打开 collection(本地文件存储)
collection = zvec.create_and_open(path="./my_zvec_db", schema=schema)

# 插入文档
collection.insert([
    zvec.Doc(id="doc_1", vectors={"embedding": my_embedding_1}),
    zvec.Doc(id="doc_2", vectors={"embedding": my_embedding_2}),
])

# 语义搜索 Top-10
results = collection.query(
    zvec.VectorQuery("embedding", vector=query_embedding),
    topk=10
)

print(results)  # [{'id': 'doc_1', 'score': 0.95, ...}, ...]

Node.js

npm install @zvec/zvec
import { createAndOpen, CollectionSchema, VectorSchema, DataType, Doc, VectorQuery } from '@zvec/zvec'

const schema = new CollectionSchema('articles', [
  new VectorSchema('embedding', DataType.VECTOR_FP32, 768)
])

const collection = await createAndOpen('./my_zvec_db', schema)
await collection.insert([new Doc('doc_1', { embedding: myEmbedding })])
const results = await collection.query(new VectorQuery('embedding', queryEmbedding), { topk: 10 })

进阶用法

混合检索:向量 + 全文 + 标量过滤

v0.5.0 新增的 MultiQuery 可以将多种检索信号合并排序,一次返回最相关的结果:

from zvec import MultiQuery, VectorQuery, TextQuery, Filter

results = collection.query(
    MultiQuery([
        VectorQuery("embedding", vector=query_embedding),
        TextQuery("content", text="大语言模型 RAG"),
    ]),
    filter=Filter("category", "==", "AI"),
    topk=20
)

DiskANN 索引——大规模数据集低内存方案

对于千万级以上数据集,可以启用 DiskANN 磁盘索引,将大部分索引数据卸载到磁盘,显著降低内存占用:

schema = zvec.CollectionSchema(
    name="large_dataset",
    vectors=zvec.VectorSchema(
        "embedding",
        zvec.DataType.VECTOR_FP32,
        768,
        index_type=zvec.IndexType.DISK_ANN,  # 磁盘索引
    ),
)

可视化调试:Zvec Studio

如果不想写代码调试数据,可以使用官方可视化工具 Zvec Studio,直接在 GUI 中浏览 collection、执行查询、分析索引状态。