选型与基准评测
本节目标
学完本节,你应能把“选哪个向量库”改写成一组可验证的问题,并用自己的数据完成小型 bake-off(候选方案实测),而不是依据厂商排行榜或流行度拍板。最终产出应是:需求清单、测试协议、结果表和一份有退出条件的架构决策记录(Architecture Decision Record,ADR)。
先判断是否真的需要向量数据库
“需要语义搜索”不等于“必须立即部署专用向量数据库”。先回答:
- 有多少可检索 point,未来 6~12 个月如何增长?
- 是否需要 tenant、ACL、时间、状态或复杂业务条件过滤?
- 写入、更新和删除多频繁,写后多久必须可搜?
- 允许 exact 线性扫描吗,还是必须用 ANN 换取延迟和吞吐?
- 团队已有 PostgreSQL 等数据库吗,能否复用其事务、备份和监控?
- 数据是否受地域、合规或私有部署约束?
只有几万条静态向量、单用户且可接受秒级查询时,一个进程内 exact baseline 可能已经够用;若需要百万级增长、低尾延迟、频繁更新、严格过滤、复制和灾备,就要系统评估数据库扩展、专用数据库或托管服务。
硬约束清单
选型前把以下约束写成数字或明确语义;“快”“规模大”“高可用”不足以验收。
| 维度 | 要记录的问题 | 示例形式 |
|---|---|---|
| 数据 | point 数、增长率、维度、dtype、payload 大小 | 2,000,000 × 768 float32,每日增量 1% |
| 查询 | QPS、并发、top-k、混合检索、批量查询 | 稳态 30 QPS,峰值 100 QPS |
| 过滤 | 字段、组合方式、选择率、ACL 群组规模 | 50% / 5% / 0.1% 三档选择率 |
| 写入 | upsert、update、delete、批量大小、可搜索延迟 | p95 写后 30 秒内可搜 |
| 质量 | ANN recall 与业务 relevance 下限 | 以 exact top-k 和人工 gold 分别评估 |
| SLO | p50/p95/p99、错误率、可用性 | 不只报告平均延迟 |
| 故障 | RPO、RTO、区域/节点故障范围 | 允许丢 5 分钟,2 小时内恢复 |
| 安全 | tenant、ACL、加密、审计、数据驻留 | 越权查询必须 fail-closed |
| 运维 | 部署、升级、监控、备份、值班能力 | 谁在周末处理索引/复制告警 |
| 成本 | 计算、存储、副本、快照、网络和人力 | 按月及按百万次查询估算 |
这些数字只是模板,不是推荐默认值。它们必须来自你的产品流量、法规和预算。
四类候选方案的责任边界
1. Exact 扫描或 ANN library
Faiss 这类 library 提供向量索引与搜索原语,适合离线实验、单机服务或作为 exact/ANN 基线。它不自动提供业务 API、鉴权、tenant 隔离、事务、备份、复制和在线 schema 演进;这些责任仍在应用团队。
2. 现有数据库的向量扩展
pgvector 将向量类型和距离查询放进 PostgreSQL,便于复用 SQL、关系字段、事务和现有运维体系。它并不免除基准测试:ANN 索引、过滤选择率、索引构建、写放大、删除膨胀、vacuum 和升级仍要用实际负载验证。
3. 自托管专用向量数据库
专用系统通常把 collection、payload filter、shard、replica、snapshot 等能力组合起来,适合检索成为独立基础设施的场景。代价是多一个需要容量规划、升级、监控、恢复和安全加固的分布式系统。以 Qdrant 文档 为例核验概念时,要把当前产品行为与通用数据库原理分开记录。
4. 托管服务
托管服务可能减少节点、补丁和部分备份工作,但不会替你定义 embedding space、数据质量、ACL、评测、成本上限、供应商退出路线或事故响应。还要验证数据驻留、导入导出、备份可见性、网络费用和限额。
建立可复现的 bake-off
第一步:冻结测试资产
- 从生产分布抽取代表性的向量、payload、租户与删除状态,并脱敏;
- 固定 query 集、人工/行为 gold relevance 和权限身份;
- 为每个 query 记录过滤条件与选择率;
- 保留高频、长尾、无答案、跨语言、近重复和权限边界样本;
- 用 exact 全量搜索生成 ANN ground truth,但不要把 exact 邻居误当成人工相关性真值。
数据、查询、gold、生成脚本和 checksum 要版本化。候选系统必须使用同一份输入。
第二步:锁定实验条件
记录硬件/实例、CPU/GPU、内存、磁盘、区域、客户端和服务端版本、索引类型与参数、复制因子、shard 数、批量大小、并发、预热方式和测试时长。分别测冷启动、预热后稳态和长时间压力,不能把不同硬件或不同缓存状态的结果并排当作公平比较。
第三步:同时测质量与系统指标
| 类别 | 至少报告 | 为什么 |
|---|---|---|
| ANN 质量 | Recall@k 相对 exact top-k | 判断近似索引漏掉了多少 exact 邻居 |
| 业务质量 | Recall@k、MRR、nDCG 或任务成功率 | exact 邻居本身也可能不相关 |
| 延迟 | p50、p95、p99,按查询类型/选择率分层 | 平均数会掩盖尾部拥塞 |
| 吞吐与稳定性 | QPS、并发、错误/超时率 | 防止只优化单请求延迟 |
| 资源 | 内存、磁盘、CPU/GPU、网络 | 质量提升可能来自更高资源消耗 |
| 生命周期 | build、load、upsert、delete、写后可搜延迟 | 在线数据不是只读快照 |
| 运维 | 扩容、重建、备份、恢复和故障切换时间 | 正常查询只是系统生命周期的一部分 |
对每个冻结的数据快照、可信身份与 filter,令 ,则 ANN Recall@k = |ANN top-K ∩ exact top-K| / K。K=0 记为 empty_eligible/不适用,不能把安全空结果记成 0;若 ANN 少返回本可得到的 个结果,缺口仍是质量或可用性问题。它只衡量近似算法对 exact 排名的保持程度;业务 gold 也必须限定为该主体、时间和策略 revision 下本应可访问的项,再由 [[Knowledge/AI Agent Engineer/docs-CN/评测体系/00-目录|评测体系]]中的 gold 和线上指标另行判断。
第四步:把过滤作为一等场景
同一索引在“无过滤”“保留一半候选”“只保留千分之一候选”时可能表现完全不同。对每档选择率测试:
- 过滤发生在候选生成前、生成中还是 top-k 之后;
- 是否能返回足量授权结果;
- p99 和 ANN recall 如何变化;
- tenant/ACL 边界是否始终 fail-closed;
- payload index 的存储和写入成本。
只测无过滤随机向量,不能证明 RAG 生产查询可用。
第五步:测更新、故障与恢复
混合运行查询、upsert、delete 和索引维护;制造客户端超时重试、进程重启、节点不可用和磁盘压力。按 [[Knowledge/AI Agent Engineer/docs-CN/向量数据库/06-备份恢复与迁移|备份、恢复与迁移]]在隔离环境恢复,并核对 space contract、point/tombstone 数、ACL 与 gold queries。若候选方案无法满足 RPO/RTO,应在决策中直接记录,而不是留给上线后补救。
成本不能只看单价
总成本至少包括:
- 向量、payload、索引、WAL/日志、replica 和快照存储;
- 持续服务、批处理重建、备份恢复和跨区域网络;
- 监控、升级、容量规划、安全审计与值班人力;
- 数据迁移、双写/双读和退出供应商的工程成本。
用相同可靠性与数据保留条件比较,不要拿“单副本无备份”的自托管成本与“多副本含备份”的托管价格直接比较。
决策矩阵与 ADR
先设“必须满足”的淘汰门槛,再对剩余候选评分。权重应来自业务,不应为了让预选产品胜出而倒推。
| 条件 | 类型 | 候选 A | 候选 B | 证据位置 |
|---|---|---|---|---|
| ACL 越权为 0 | 必须 | 通过/失败 | 通过/失败 | 安全测试报告 |
| p99 延迟达标 | 必须 | 数值 | 数值 | 冷/热分层结果 |
| 恢复满足 RTO | 必须 | 时长 | 时长 | 恢复演练记录 |
| 业务 nDCG | 加权 | 数值 | 数值 | gold-query 评测 |
| 三年总成本 | 加权 | 数值 | 数值 | 成本模型 |
ADR 至少写清:问题与约束、候选、实验版本、选择、未选择理由、已知风险、迁移/退出条件、复评日期与负责人。例如“达到多少 point、p99 或过滤失败阈值时复评”比“以后规模大了再换”可执行。
常见错误
- 用随机向量和单线程平均延迟代表真实业务;
- 只报告 QPS,不报告 ANN/业务质量;
- 调到不同 recall 的索引参数后直接比较延迟;
- 忽略过滤选择率、更新、删除和写后可搜延迟;
- 把厂商公开 benchmark 当作自身工作负载结论;
- 未做恢复演练就把“有 snapshot”写成“已验证灾备”;
- 把 prototype library 包装成数据库,却没有鉴权、并发、备份与审计。
练习
为“200 万 chunk、每日更新 2%、部门 ACL、峰值 80 QPS、数据必须留在自有网络”的内部 RAG 写一页选型协议:
- 明确至少 5 个必须门槛与 5 个加权条件;
- 比较 exact/library、pgvector、专用向量库三类候选;
- 设计 50 个权限边界 query 和三档过滤选择率;
- 说明 exact ground truth 与业务 gold 的区别;
- 给出故障注入、隔离恢复和退出条件;
- 不填写未经实测的性能数字。
掌握检查
- 我能先判断“是否需要新系统”,再比较产品。
- 所有门槛都有可执行测试和通过条件。
- 候选使用同一数据、硬件、版本、缓存和并发条件。
- 我同时报告 ANN recall、业务质量、尾延迟、吞吐与资源。
- 我覆盖过滤、租户、写入、删除、故障和恢复。
- ADR 写明证据、风险、退出条件和复评日期。
完成后进入 [[Knowledge/AI Agent Engineer/docs-CN/向量数据库/08-项目-玩具向量存储|项目:玩具向量存储]]。
参考资料
- Faiss official repository
- pgvector official repository
- Qdrant Documentation
- Qdrant: Filtering
- Qdrant: Distributed deployment
- PostgreSQL: Backup and Restore
- PostgreSQL: High Availability, Load Balancing, and Replication
来源获取日期:2026-07-22。产品功能、默认参数、托管条款与性能均应按锁定版本和自身环境复测。