Zvec进程内向量数据库

每个十年左右,就会有人把强大的技术变成一个你可以直接嵌入应用程序中的库。D. Richard Hipp在2000年为关系型数据库用SQLite这么做了。现在DuckDB在2019年为分析工作负载这么做了。现在,阿里巴巴的通义实验室正在为向量搜索做出同样的赌注。

认识Zvec——一个开源的、进程内向量数据库,在Apache 2.0许可证下由阿里巴巴的通义实验室发布。其定位是刻意的——"向量数据库的SQLite"——架构反映了这一雄心。

1、问题:向量搜索是一个部署问题

RAG(检索增强生成)和语义搜索的兴起已经使向量数据库成为AI基础设施的核心部分。但这里给开发者们带来了每天面临的紧张局面:你需要向量搜索,但选项却把你推向相反的方向。

仅限索引的库如Faiss给你原始速度和算法灵活性,但它们正是那样——仅限索引。没有内置持久性,没有CRUD操作,没有元数据过滤,没有崩溃恢复。生产就绪性需要围绕核心索引进行大量工程工作。

像ChromaDB这样的嵌入式数据库使得通过Python友好的API开始使用变得微不足道,但其向量搜索能力达到了上限。有限的索引选择,没有量化压缩,以及受约束的资源控制成为数据集增长时的瓶颈。

像Milvus或Qdrant/Weaviate这样的基于服务的系统提供完整的功能集但要求独立的进程、网络通信和运营开销。它们不能干净地嵌入到CLI工具、桌面应用程序或移动客户端中。

差距很明显:没有嵌入向量数据库,既能在操作简单性与生产级性能之间提供真正的生产级向量搜索。

这就是Zvec旨在填补的差距。

2、Zvec实际上是什么

Zvec是一个嵌入式的、进程内向量数据库,在Apache 2.0许可证下由阿里巴巴的通义实验室发布。其定位是刻意的——"向量数据库的SQLite"——架构反映了这一雄心。

在其核心,Zvec包装了Proxima,阿里巴巴的向量搜索引擎,每秒处理数十亿次查询,为阿里巴巴搜索、推荐系统和广告系统提供支持。Proxima不是新的——它已经在阿里巴巴集团的生产环境中运行了多年,为淘宝搜索、支付宝的面部支付系统、优酷视频搜索和阿里妈妈广告系统提供支持。

代码库主要是C++(81.5%),带有Python绑定(7.6%)和用于跨语言接口的SWIG。它支持Linux x86_64、Linux ARM64和macOS ARM64,支持Python 3.10–3.12,并通过npm提供Node.js SDK。

3、设计原则:为什么"嵌入式"重要

要理解为什么Zvec的架构意义重大,思考一下在数据库术语中"嵌入式"实际上意味着是有帮助的:

零部署开销。无需服务安装、配置、监控或升级。没有端口冲突,没有连接池,没有网络延迟,没有崩溃恢复。

进程级隔离。你的数据存在于磁盘上的文件中。备份意味着复制文件。迁移意味着移动文件。

可预测的资源使用。由于数据库在你的进程中运行,资源消耗受限于你分配的内容。备份意味着复制1GB文件。迁移意味着移动1GB文件。

通用端口性。如果你的代码在某处运行,数据库也在那里运行——笔记本电脑、手机、嵌入式设备、无服务器函数。

Zvec将这一哲学应用于向量搜索,考虑了日益常见的本地RAG助手场景——一个工具让你通过自然语言查询代码库、文档或会议笔记,完全离线运行。这要求向量存储、标量元数据、混合过滤、CRUD操作(因为文件会改变)、崩溃恢复和严格的资源控制——而这些都是现有解决方案无法提供的。

4、性能故事:2×之前领先者头

数据库中的性能声明很常见。让Zvec的数字值得关注的是基准测试方法和性能优势的幅度。

Zvec团队使用了VectorDBBench,一个由Zilliz(Milvus背后的公司)维护的开源基准测试框架。这不是专有的基准——它与社区用来评估向量数据库的相同工具。

数据集是Cohere 10M——1000万个768维向量,代表了真实的、生产规模的工作负载。

标题结果:每秒超过8000次查询,召回率可比较,索引构建时间比之前的领导者快2倍以上。

为了提供背景,在Cohere 1M上的先前领导者(ZillizCloud)每秒执行约4000次查询。Zvec实现了超过2倍的性能,同时保持了相当的召回率。

对于Cohere 100万向量数据集(1百万向量),性能优势依然成立,展示了效率收益并不局限于大规模。

5、Zvec特性集:为RAG准备就绪

超越性能,Zvec带有一整套针对常见RAG工作流程的功能:

完整的CRUD操作——文档可以插入、更新、删除,这对知识库动态变化至关重要。

模式演进——索引策略和字段可以随着查询模式的发展而调整,无需从头重建。

多向量检索——单个查询可以组合多个嵌入通道(例如,语义+关键词向量),这对多模态RAG流水线至关重要。

内置重新排序——支持加权融合和交互式排序(RRF),消除了应用程序层的常见痛点。

混合搜索——标量过滤器被推入向量索引执行路径中,避免全表扫描并加速相等性和范围查询。

崩溃恢复——具有线程安全访问的持久存储和异常退出后的自动恢复。

API本身是刻意最小化的。一个工作原型只需要三次调用:

import zvec

# 1. 定义模式并创建集合
schema = zvec.CollectionSchema(
    name="knowledge_base",
    vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 768),
)
collection = zvec.create_and_open(path="./my_kb", schema=schema)

# 2. 插入文档
collection.insert([
    zvec.Doc(
        id="doc_1",
        vectors={"embedding": [0.1, 0.2, ...]}, # 768维向量
    ),
])

# 3. 查询
results = collection.query(
    zvec.VectorQuery("embedding", vector=[0.4, 0.3, ...]),
    topk=10
)

6、资源治理:为受限环境设计

在规模上的性能是一回事,在资源受限的环境中是另一回事。Zvec通过三层内存控制解决了这一紧张局面:

流式写入enable_mmap=true)默认以64 MB的块处理数据,防止系统在摄取期间将整个数据集保存在内存中。

内存映射模式enable_mmap=true)将向量和索引数据分页到按需的物理内存中,允许大于可用RAM的数据集仍然可以被搜索。

硬内存限制(实验性)通过显式的进程级内存池和memory_limit_mb参数维持一个有上限的内存池,对CPU控制提供了更细粒度的管理。

对于CPU控制,Zvec提供optimize_threads(构建并发性)、query_threads(查询并发性)和每操作concurrency参数。在GUI应用程序中,不受约束的向量计算可能会使CPU饱和,导致UI线程卡顿。

7、Zvec在生态系统中的位置

嵌入式向量数据库空间一直在增长,但每个解决方案占据了不同的细分市场:

Faiss(Meta)仍然是原始向量索引性能的黄金标准,尤其是在GPU加速方面。但它是一个库,不是一个数据库。

ChromaDB为原型设计提供了最佳的开发者体验,具有类NumPy的API和通过DuckDB + Parquet实现的内置持久性。但其向量搜索能力有限,索引选择较少,没有量化,并且资源控制成为瓶颈。

DuckDB-VSS在DuckDB出色的嵌入式数据库架构上增加了向量搜索,继承了DuckDB的许多优点。但向量功能受约束——有限的索引选择,没有精细的内存或CPU控制。

Milvus/Qdrant/Weaviate为全面的生产级特性提供全套,但需要单独的服务部署。它们适合服务器端基础设施,但不适合嵌入到桌面工具或移动应用程序中。

Zvec的定位是独特的:它旨在将Faiss级的性能与SQLite类的操作简单性结合起来,使其能够嵌入到开发者日常使用的工具和应用程序中。

8、未来:生态系统整合

Zvec团队已经概述了四个战略优先事项,展望未来发展:

开发者体验——增强CLI工具、多语言SDK和与LangChain及LlamaIndex的深度集成。这些框架集成对于RAG工作流程中的本地AI助手将至关重要。

更深层的能力——分组查询(带有GROUP BY语义)、持续索引改进和正在进行的基准跟踪。这些功能将支持更复杂的RAG流水线。

生态系统协作——为DuckDB和PostgreSQL的向量扩展,以及对外部表格格式如Parquet和CSV的支持。这使Zvec能够作为向量搜索引擎嵌入其他数据库系统内。

真实世界的边缘验证——与ISVs和硬件供应商在iOS、Android和Nvidia Jetson部署上的合作伙伴关系。这将是"随处运行"承诺的真正测试。

9、更宏大的图景:基础设施迁移

Zvec的发布是更广泛趋势的一部分:AI基础设施正从仅限云服务向能够在边缘设备上运行、嵌入式的解决方案迁移。

随着AI助手越来越多地从基于云的处理转向本地执行——出于隐私原因、延迟约束和成本控制——对轻量级、嵌入式的向量数据库的需求只会增长。

Zvec在这一转变中处于有利位置。通过使生产级的向量搜索对任何能够运行Python的环境都可用,它可以使高性能向量搜索民主化,超越了仅限云服务或复杂部署所允许的范围。


原文链接: Zvec: Alibaba Just Open-Sourced "The SQLite of Vector Databases" — And It's Blazing Fast

汇智网翻译整理,转载请标明出处