ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zvec 嵌入式向量数据库快速上手:进程内极速向量检索实践指南

Zvec 嵌入式向量数据库快速上手:进程内极速向量检索实践指南 向量数据库数据库嵌入式数据库【免费下载链接】zvecA lightweight, lightning-fast, in-process vector database项目地址https://gitcode.com/GitHub_Trending/zve/zvec点击查看免费下载导读Zvec 是一款开源的嵌入式进程内向量数据库以极简配置提供生产级、低延迟、可扩展的向量检索能力。本文以官方 README 为骨架结合仓库内 Python SDK 源码系统讲解 Zvec 的安装方式、Schema 建模、数据写入、向量/全文/混合检索、索引体系与性能特性帮助你快速在 Notebook、服务端进程乃至边缘设备中嵌入毫秒级向量检索能力。Zvec 是什么Zvec是一款开源的嵌入式进程内向量数据库定位是轻量、极速、可直接嵌入应用程序。它不需要单独部署服务进程而是作为库直接嵌入到你的应用中运行以极简的配置提供生产级、低延迟、可扩展的向量检索能力。用一句话概括其设计哲学开箱即用安装之后即刻开始搜索纯本地运行无需服务器、无需配置、零门槛见 README_CN.md。从仓库结构看Zvec 采用 C 核心引擎src/core/、src/ailego/、src/turbo/加多语言绑定的架构src/binding/python/提供 Python 绑定src/binding/c/提供 C API并在此基础上衍生出 Node.js、Go、Rust、Dart/Flutter 等官方 SDK覆盖了从高性能服务器到移动端的主流开发语言。核心特性一览根据官方 README 与仓库源码Zvec 的核心能力可以归纳为以下几点极致性能毫秒级响应可轻松检索数十亿级向量官方性能报告见仓库 README 引用的 benchmarks 文档。开箱即用pip install zvec后即刻开始搜索纯本地运行无需服务器与额外配置。稠密 稀疏向量支持稠密向量、稀疏向量与多向量查询并提供从内存到磁盘的多种向量索引类型。全文检索FTS原生基于关键词的全文检索可用自然语言或结构化表达式检索字符串字段。混合检索单次查询中融合向量语义、全文检索与标量过滤获得精确结果。持久化存储WAL 预写日志保障数据持久性——即使进程崩溃或意外断电数据也不会丢失。并发访问支持多进程同时读取同一个 Collection写入为单进程独占模式。进程内运行无需单独部署服务Notebook、高性能服务器、CLI 工具、边缘设备随处可用。上述并发与持久化能力在源码中有直接印证Python 侧Collection的flush()方法会强制将所有待写入数据落盘以确保持久性见 collection.pyclose()会释放集合的文件锁以便路径可被重新打开或删除见 collection.pyC 侧则由src/db/common/下的 RocksDB 上下文与rocksdb_context.cc等模块支撑 WAL 与存储。安装与平台支持多语言 SDKZvec 提供多语言官方 SDKPythonpip install zvec需 64 位 Python 3.10–3.14Node.jsnpm install zvec/zvecGo高性能的 Go 绑定Rustcargo add zvec-rustDart/Flutterflutter pub add zvecPython 侧仓库自带的pyproject.toml定义了包的构建与依赖元数据安装后import zvec即自动加载底层_zvec原生扩展在 zvec.py 中可以看到它从zvec._zvec导入 C 绑定对象。支持的平台Linuxx86_64、ARM64glibc 与 muslmacOSARM64、x86_64Windowsx86_64若需从源码构建可参考仓库根目录的CMakeLists.txt构建体系cmake/目录下的option.cmake、utils.cmake、bazel.cmake等提供了跨平台构建选项src/binding/python/CMakeLists.txt与src/binding/c/CMakeLists.txt分别负责 Python 与 C SDK 的编译产出。一分钟上手完整 Python 示例以下是官方 README 中的最小可用示例完整继承如下import zvec # 定义 collection schema schema zvec.CollectionSchema( nameexample, vectorszvec.VectorSchema(embedding, zvec.DataType.VECTOR_FP32, 4), ) # 创建 collection collection zvec.create_and_open(path./zvec_example, schemaschema) # 插入 documents collection.insert([ zvec.Doc(iddoc_1, vectors{embedding: [0.1, 0.2, 0.3, 0.4]}), zvec.Doc(iddoc_2, vectors{embedding: [0.2, 0.3, 0.4, 0.1]}), ]) # 向量相似度检索 results collection.query( zvec.Query(field_nameembedding, vector[0.4, 0.3, 0.3, 0.1]), topk10 ) # 查询结果按相关性排序的 {id: str, score: float, ...} 列表 print(results)这段代码完整覆盖了 Zvec 的使用闭环定义 Schema → 创建并打开 Collection → 插入文档 → 向量检索。下面对每一步做源码级拆解。1. Schema 建模CollectionSchema / FieldSchema / VectorSchemaSchema 是 Zvec 数据建模的核心。CollectionSchema由名称name、标量字段fields与向量字段vectors构成字段名在标量与向量之间必须全局唯一见 collection_schema.py。VectorSchema用于定义向量字段关键参数包括name向量字段名须在集合内唯一data_type向量数据类型支持VECTOR_FP16、VECTOR_FP32、VECTOR_FP64、VECTOR_INT8以及稀疏向量SPARSE_VECTOR_FP16、SPARSE_VECTOR_FP32见 field_schema.pydimension稠密向量维度必须 ≥ 0稀疏向量维度可为 0index_param该向量字段的索引配置默认是FlatIndexParam()见 field_schema.py。FieldSchema用于定义标量字段如 ID、时间戳、分类标签支持的类型包括INT32/INT64/UINT32/UINT64、FLOAT/DOUBLE、STRING/BOOL以及各类ARRAY_*数组类型见 field_schema.py。标量字段可配置nullable以及倒排索引InvertIndexParam或全文检索索引FtsIndexParam。一个更完整的 Schema 建模示例from zvec import FieldSchema, VectorSchema, DataType from zvec.model.param import HnswIndexParam, InvertIndexParam, FtsIndexParam schema zvec.CollectionSchema( nameproducts, fields[ FieldSchema(id, DataType.INT64, nullableFalse), FieldSchema(category, DataType.STRING, index_paramInvertIndexParam()), FieldSchema(description, DataType.STRING, index_paramFtsIndexParam(tokenizer_namestandard)), ], vectorsVectorSchema( embedding, DataType.VECTOR_FP32, dimension128, index_paramHnswIndexParam(m16, ef_construction200), ), )2. 创建与打开create_and_open / openzvec.create_and_open(path, schema, optionNone)创建新集合并打开。若指定路径已存在集合底层实现可能报错见 zvec.py。zvec.open(path, optionNone)打开磁盘上已存在的集合前提是此前通过create_and_open创建过见 zvec.py。两者都返回Collection对象它封装了完整的 DDL/DML/DQL 操作入口见 collection.py。CollectionOption支持read_only只读打开默认 False与enable_mmap内存映射 I/O默认 True两个开关见 param/init.pyi适合多进程共享读的场景。3. 数据写入insert / upsert / update / deleteDoc是数据写入与查询返回的统一载体包含id、score查询时的相关度分数、vectors命名字典与fields标量字段字典四个属性见 doc.py。构造 Doc 时numpy.ndarray向量会被自动转换为普通 Python list便于序列化。Collection 提供完整的数据操纵 API见 collection.pyinsert(docs)插入新文档文档 ID 必须唯一且符合 Schemaupsert(docs)按 ID 插入新文档或更新已有文档update(docs)按 ID 更新已有文档只更新指定的字段delete(ids)/delete_by_filter(filter)按 ID 或按过滤表达式如age 30删除文档。所有写入方法都返回Status对象批量操作返回list[Status]用于逐条判断成功与否。4. 向量检索Query 与 collection.queryQuery是 Zvec 的查询单元一个Query只针对一个字段且只能承载一种检索语义见 param/query.py向量查询通过vector显式查询向量或id指定文档 ID取该文档的向量作为查询向量发起全文检索FTS通过ftsFts(...)发起其中Fts支持query_string结构化表达式如vector -slow exact phrase与match_string自然语言匹配串两种形式二者互斥校验规则明确id与vector不能同时提供FTS 与向量字段不能组合在同一个Query中见 param/query.py。collection.query()的核心参数见 collection.pyqueries一个或多个Queryvectors为已废弃的旧参数名仍兼容但会发出 DeprecationWarningtopk返回最近邻数量默认 10必须为正整数filter标量过滤的布尔表达式如category tech在检索前对候选集做预过滤include_vector是否在结果中携带向量数据默认 Falseoutput_fields指定返回的标量字段默认返回全部reranker对 Top-k 结果做重排的精排器。同时Collection还提供fetch(ids, ...)按 ID 取文档、iter_docs()全集合流式遍历内存占用恒定且提供快照语义见 collection.py以及group_by_query()分组向量检索按标量字段值分组返回各组 Top-k见 collection.py。索引体系与量化按需选型Zvec 覆盖了从内存到磁盘、从精确到近似的完整索引谱系全部参数类定义在 param/init.pyi 中索引类型参数类核心参数与默认值适用场景FLAT暴力精确检索FlatIndexParammetric_typeIP可选quantize_type量化小中型数据集、精确基线HNSW图索引HnswIndexParamm50、ef_construction500可选量化与连续内存高召回率内存检索HNSW-RaBitQHnswRabitqIndexParamtotal_bits7、num_clusters16、m50、ef_construction500高压缩比低精度损失IVF倒排文件IVFIndexParamn_list10、n_iters10可选use_soar大基数内存检索IVF-RaBitQIvfRabitqIndexParamnlist1024、total_bits7大规模 量化压缩Vamana / DiskANN磁盘索引VamanaIndexParam/DiskAnnIndexParammax_degree64、search_list_size100Vamanamax_degree100、list_size50、pq_chunk_num0DiskAnn数十亿级、内存放不下的场景与索引配套的查询参数同样按索引类型区分例如HnswQueryParam(ef300)通过ef控制检索精度与延迟的权衡IVFQueryParam(nprobe10)控制探测的倒排列表数VamanaQueryParam(ef_search200)控制图检索候选列表大小。HNSW 查询参数还支持radius范围查询半径、is_linear强制线性扫描以及extra_params中的prefetch_offset/prefetch_lines缓存预取调优见 param/init.pyi。从源码结构看各索引的实现在src/core/algorithm/下分目录组织hnsw/、hnsw_rabitq/、ivf/、ivf_rabitq/、diskann/、vamana/、flat/、flat_sparse/、hnsw_sparse/等量化器位于src/core/quantizer/如uniform_uint4/7/8_converter.cc、integer_quantizer_converter.cc、half_float_converter.cc等标量/向量距离计算由src/ailego/math/与src/turbo/提供多指令集实现AVX2/AVX512/NEON/SSE 及 fp16 等变体。v0.7.0 还新增了PQ-INT8 量化器并让 RaBitQ 支持运行时AVX2/AVX512 指令集动态分发同一套二进制可在不同 CPU 上自动选择最优路径。全文检索FTS与混合检索Zvec 的 FTS 索引由FtsIndexParam配置见 param/init.pyitokenizer_name分词器支持standard、ngramv0.7.0 新增更适合短语、代码、短文本、jieba中文需jieba.dict.utf8词典可配置jieba_dict_dir与user_dict_path、whitespacefilters分词后处理过滤器支持lowercase默认、ascii_folding、stemmerextra_params分词器/过滤器的额外参数JSON 字符串如 ngram 的ngram_min/ngram_max、standard 的max_token_length等。FTS 查询通过Query(field_namecontent, ftsFts(match_stringmachine learning))发起并可搭配FtsQueryParam(default_operatorAND)控制多词匹配逻辑。混合检索即在同一collection.query()调用中传入多个Query向量 FTS 标量filter由查询执行器统一融合打分——Python 侧入口为 query_executor.py底层由src/db/sqlengine/的 SQL 引擎与src/core/mixed_reducer/的混合归约模块承担。仓库测试python/tests/test_collection_fts_vector_hybrid.py专门验证了向量 全文的混合检索路径。init 全局配置面向容器环境的自适应调优在调用任何 Collection 操作之前可先通过zvec.init()做全局初始化只能调用一次重复调用会抛出RuntimeError见 zvec.py。其关键参数如下参数默认值说明log_type/log_levelCONSOLE/WARN日志输出目标控制台或文件与最低级别DEBUG/INFO/WARN/ERROR/FATALlog_dir/log_basename/log_file_size/log_overdue_days./logs/zvec.log/ 2048 MB / 7 天文件日志的目录、文件名、单文件滚动大小与保留天数query_threads/optimize_threads自动推断查询线程数 / 后台任务合并、建索引线程数自动按 CPU 核数含 cgroup推断invert_to_forward_scan_ratio0.9从倒排索引切换到全量正向扫描的阈值brute_force_by_keys_ratio0.1按 Key 走暴力查找而非索引的阈值fts_brute_force_by_keys_ratio0.05FTS 倒排过滤高度选择时切换为候选驱动暴力扫描的阈值memory_limit_mb自动推断软内存上限MB接近上限时可能节流或失败容器中按 cgroup 内存 × 0.8 推断jieba_dict_dir自动覆盖 jieba 词典目录也可用ZVEC_JIEBA_DICT_DIR环境变量设计要点所有None参数都不会进入配置载荷由核心库按运行环境cgroup CPU/内存限制应用自适应默认值——这在 Kubernetes/Docker 下特别有用省略memory_limit_mb与线程数即可让 Zvec 自动适配容器配额见 zvec.py。仓库测试python/tests/test_db_config.py与tests/db/common/config_test.cc覆盖了相关配置解析逻辑。版本动态与生态v0.7.02026 年 8 月 24 日发布带来了多项关键更新zvec-grepzg本地优先的工作区搜索 CLI统一 ripgrep、BM25 与向量检索为人类与 AI Agent 设计ReMe 集成zvec 成为 ReMeAgent 记忆管理套件的文件存储后端提供进程内 HNSW 向量检索DiskANN 生产化新增 Linux/macOS ARM64 支持与 io_uring 异步 I/O 后端自动回退到最优 I/O 方案无需任何配置索引优化新增 IVF-RaBitQ 索引、PQ-INT8 量化器RaBitQ 支持运行时指令集动态分发部署体验优化动态库大幅瘦身macOS arm64 C API 库 37→22 MB降幅 40%新增 musl libc / Alpine Linux 支持每次发布自动提供 Linuxglibc/musl、macOS、Windows、Android、iOS 的预编译 SDKDocIterator全集合文档流式遍历迭代器覆盖 C、C、Python全文检索新增 N-gram 分词器更适合短语、代码、短文本检索。仓库中的scripts/generate_standard_tokenizer_unicode.py与src/db/index/column/下的 tokenizer 相关实现含*.g4ANTLR 语法文件印证了分词器体系的演进路径python/tests/test_collection_diskann.py、test_collection_ivf_rabitq.py、test_collection_hnsw_rabitq.py、test_iter_docs.py等测试文件则分别覆盖了上述新特性。性能定位Zvec 官方将自身定位为毫秒级响应、轻松检索数十亿级向量的嵌入式向量数据库README 中提供了 QPS 性能基准图并指向官方性能报告含具体测试方法、配置与完整结果。需要说明的是具体基准数值以官方性能报告为准本仓库内不包含可独立复现的完整 benchmark 数据集。仓库tools/core/下提供了bench.cc、recall.cc等评测工具与txt2vecs.cc数据转换工具可在本地构建后自行复现压测。参与贡献Zvec 欢迎来自社区的每一份贡献——无论是修复 Bug、新增功能还是完善文档。开始参与前请查阅 贡献指南其中规定了代码风格、提交流程与测试要求仓库内python/tests/与tests/下提供了覆盖 Python 与 C 两层的完整测试用例可作为新增代码的回归基线。小结Zvec 的核心价值在于把向量数据库塞进进程里通过pip install zvec一行命令即可获得涵盖稠密/稀疏向量、全文检索、混合检索、多索引类型与 WAL 持久化的完整检索能力。本文给出的 Schema 建模、数据写入与检索代码均可直接复制运行进一步的参数细节索引、量化、分词器、全局配置可在 Python 参数定义、Collection API 与 查询模型 中查阅C 底层实现则分布在src/core/与src/db/目录中可供深度使用者继续溯源。赞分享向量数据库数据库嵌入式数据库【免费下载链接】zvecA lightweight, lightning-fast, in-process vector database项目地址https://gitcode.com/GitHub_Trending/zve/zvec点击查看免费下载相关推荐mark.js 自定义配置打造个性化文本标记解决方案mark.js 自定义配置打造个性化文本标记解决方案 mark.js 是一款强大的 JavaScript 文本标记库支持关键词高亮、自定义样式和高级匹配规则Qdrant向量数据库快速入门指南Qdrant向量数据库快速入门指南 什么是Qdrant Qdrant是一个开源的向量搜索引擎和向量数据库专为高效存储和检索高维向量数据而设计。它支持多种相似度向量数据库数据库后端搜索引擎VectorDBBench终极指南向量数据库性能测试快速上手VectorDBBench终极指南向量数据库性能测试快速上手 VectorDBBench是一个功能强大的 向量数据库性能测试工具 专为评估和比较不同向量数据性能测试向量数据库数据库后端上一篇agentic-awesome-skills 技能解剖Andru.ia 解决方案架构师混合引擎Hybrid Engine v2.0项目诊断与路线图工作流下一篇在 Zephyr 中使用 NXP RD-RW612-BGA三射频无线 MCU 开发板的完整上手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表