数据库转大模型:向量库选型这件事老本行占便宜
版权与内容来源声明本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容均在附表 A 中标注来源引用官方原文保持原样不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式也不对任何收益结果作承诺。转载请注明出处。第 1 章 · DBA 转大模型为什么先卡在检索层1.1 先把概念对齐向量库到底在干什么大模型应用里想让模型回答「你自己那堆资料」的问题通常先走检索增强RAGRetrieval-Augmented Generation意思是先查到相关资料再让模型基于资料作答。查资料这一步做的事是把文档切成小片段用嵌入模型Embedding把一段文字变成一串数字的模型把每个片段转成向量vector就是一串浮点数比如 768 个数字排成一行。向量库vector database就是存这些向量、并按「距离最近」把相似片段找回来的库。传统数据库按等值条件或范围条件找行向量库按「像不像」排序找行——这是两者最本质的差别也是你换视角的第一站。DBA 的直觉会立刻跳出来要找得快就得建索引。这个直觉是对的但向量索引和 B 树索引不是一回事很多转岗的人就是在这里把经验套错了地方。1.2 老本行能套用的地方和套不上的地方下面这张表把两类索引的直觉逐条摆开。左边是你已经形成的判断右边是套到向量检索时的真实情况。表 1 · 传统索引直觉与向量索引对照传统数据库里的直觉向量检索里的真实情况迁移结论建了索引查询结果和没建时一致加近似索引后同样的查询会返回不同结果结果集不再确定得改用召回率衡量索引越大越准代价是慢近似索引是「拿召回换速度」的连续旋钮要在召回与延迟之间选一个工作点索引只影响性能不影响语义距离度量方式余弦、内积、欧氏会改变最近的定义建库前就得定死度量方式索引与数据强一致部分近似索引存在先灌数据还是先建索引的时序约束导入顺序成了运维约定这张表最后一行值得单独记住它不是性能问题而是正确性问题。转到向量库你要核对的第一件事往往不是快不快而是结果还对不对。1.3 本文给你的是判断顺序不是产品排名下面各章按五个维度展开索引类型、召回质量、内存占用、构建时间、带过滤条件的检索。第 2 章先给总表之后逐维给阈值第 6、7 章讲清你原本的优势和反向判据。第 2 章 · 一张五维选型对照表2.1 这五个维度是怎么挑出来的选向量库常见的一种错法是先看别人推荐哪个产品再倒过来找理由。更稳的顺序是先把你的数据形状写成五个可回答的问题再去挑能满足这些答案的库。这五个问题恰好也是 DBA 每天都在回答的容量、性能、约束、变更和安全问题。2.2 五维对照总表表 2 · 向量库选型五维对照每一维都给出判断阈值维度关键问题判断阈值 / 起手做法① 索引类型要精确检索还是近似最近邻图索引还是倒排聚类索引候选集占比高、要求结果确定 → 精确检索追求低延迟且能接受召回损失 → 近似索引② 召回质量用哪个指标量、拿谁的数据测用自己的数据跑recallk别只看公开榜单③ 内存占用向量本体加索引开销要多少内存先按「条数 × 维度 × 每维字节数」粗算本体再叠加索引额外开销④ 构建时间批量导入还是增量写入索引构建慢于数据到达速度时考虑先停写、批量建完再开写⑤ 带过滤检索过滤条件该在检索前还是检索后生效过滤命中比例是核心变量比例越低越要警惕五维里①③④是你最有发言权的⑤几乎就是你的老本行②是唯一需要补的新知识。2.3 怎么用这张表不要五维同时调。建议先卡住 ②召回质量因为它是唯一决定答案对不对的维再卡 ③内存占用因为它决定你的机器买不买得起①④⑤是拿到预算和硬件后再逐个调的工作点。第 3 章 · 维度一索引类型精确还是近似3.1 精确检索与近似最近邻精确检索也叫暴力检索、全量扫描就是拿查询向量和库里每条向量逐个算距离结果必然最准代价是随数据量线性变慢。近似最近邻ANNApproximate Nearest Neighbor意思是牺牲一点准确性换取速度则通过索引只访问可能相近的一部分数据。pgvectorPostgreSQL 的向量扩展官方仓库写得很直白默认执行精确检索结果完美召回一旦加上近似索引同一个查询会给出不同结果。这句话是理解整件事的钥匙——近似索引是「拿召回换速度」不是免费的加速。3.2 图索引与倒排式聚类索引各用在哪主流的近似索引大致分两大族图索引HNSWHNSW 是 Hierarchical Navigable Small World 的缩写分层可导航小世界图。人话解释把向量当成地图上的点索引预先修好高速公路和小路检索时从高速逐层下到小路几跳就接近目标。论文《Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs》arXiv:1603.09320提出的就是这一结构。倒排式聚类索引IVFIVF 是 Inverted File 的缩写先把向量聚成若干簇检索时只进最接近的少数几个簇。人话解释先按片区分好类查的时候只翻最近的几个片区其余不翻。表 3 · 两大索引族对照对照项图索引HNSW倒排聚类索引IVF检索速度与召回的平衡同等召回下更快略逊构建时间更长更短内存占用更多更少适合的导入时机可以在有数据后增量累积官方建议先有数据再建索引参数旋钮构建用m、ef_construction查询用hnsw.ef_search建索引用lists查询用probes表 3 的构建时间更长、内存更多不是我的判断而是 pgvector 官方仓库对两种索引的原话对比。Qdrant 官方文档也说明它当前只用 HNSW 作为稠密向量索引默认m为 16、ef_construct为 100——不同产品的默认值不一样这正说明参数要按自己数据调而不能照抄。3.3 参数怎么起手以 pgvector 为例先建表。⚠️代码待验证-- pgvector建表向量维度必须和嵌入模型输出一致CREATETABLEdocs(id bigserialPRIMARYKEY,contenttext,categorytext,embedding vector(768));再建 HNSW 索引给余弦距离用。⚠️代码待验证-- HNSWm 与 ef_construction 越大召回越好、构建越慢、内存越多CREATEINDEXONdocsUSINGhnsw(embedding vector_cosine_ops)WITH(m16,ef_construction64);-- 查询期再定搜索候选宽度越大召回越好、越慢SEThnsw.ef_search100;如果数据还在持续写、又不想等索引构建IVF 更合适但要先有数据再建。⚠️代码待验证-- IVFlists 起手值100 万行以内用 行数/1000超过 100 万行用 行数的平方根-- 查询时 probes 起手值约为 lists 的平方根CREATEINDEXONdocsUSINGivfflat(embedding vector_cosine_ops)WITH(lists100);SETivfflat.probes10;这几个默认值和起手公式都来自 pgvector 官方仓库 README不是我拍脑袋写的。第 4 章 · 维度二与维度三召回质量、内存占用4.1 召回质量怎么量召回率recall的人话解释是真正最相近的那些结果里你的检索找回来了多少。常用指标是recallk即取回来的前 k 条里命中了多少条本该在前 k 的。量它的唯一可靠办法是拿自己的数据跑一遍先小批量做一次精确检索当标准答案再用近似索引跑同一批查询比较两者重叠比例。下面是一段流程示意。⚠️代码待验证# 召回测量流程示意非完整可运行脚本# 1) 用精确检索取标准答案 top_k# 2) 用近似索引取同一条查询的 top_k# 3) 计算两者重叠数 / k即 recallkdefrecall_at_k(exact_ids,approx_ids,k):exact_setset(exact_ids[:k])hitsum(1foriinapprox_ids[:k]ifiinexact_set)returnhit/k为什么必须用自己的数据测、而不是看公开榜单向量分布、查询分布、过滤条件都不同榜单上的默认参数在你这里往往不是好工作点。这不是否定榜单而是说榜单只能帮你排除不能替你定参。表 4 · 召回相关指标该看什么指标人话解释什么时候必须看recallk前 k 条里找回了多少该在前 k 的每次调索引参数后延迟分位如 95 分位95% 的查询都在多久内返回定工作点时和召回一起看结果集稳定性同一查询多次执行结果是否一致近似索引下用来确认行为4.2 内存占用先粗算再买机器DBA 最熟的容量规划在这里可以直接用。粗算公式分两层第一层是向量本体向量条数 × 向量维度 × 每维字节数。pgvector 官方仓库给出更精确的式子每个向量占「4 × 维度 8」字节且向量最多可到 16000 维能被 HNSW 索引的vector类型最多 2000 维半精度类型可到 4000 维。第二层是索引的额外开销随m增大而增加且 HNSW 的内存占用高于 IVF。把数字代进去看一遍⚠️代码待验证假设100 万条向量768 维用 FP32每维 4 字节 本体内存 1,000,000 × 768 × 4 字节 ≈ 3.07 GB 换算成半精度每维 2 字节≈ 1.54 GB 再加上 HNSW 图结构的额外开销随 m 增大而增加 最终常驻内存 向量本体 索引开销 数据库自身开销表 5 · 内存分项与判断分项影响变量判断动作向量本体条数、维度、精度先算本体超内存就先降精度或换更小嵌入模型索引结构索引类型、m等参数内存吃紧时先在 IVF 与 HNSW 之间权衡库自身与缓存连接数、缓存配置预留余量别按刚好装下买机器Milvus 官方文档给了一条容量判据可供参考大约四分之一原始数据能进内存时考虑面向磁盘的 DiskANN 以获得更稳定的延迟全部数据能进内存时则考虑常驻内存的索引类型。第 5 章 · 维度四与维度五构建时间、带过滤检索5.1 构建时间批量导入还是增量写入索引构建和写入会互相抢资源。判断方法很简单问一句「索引构建速度跟得上数据到达速度吗」。表 6 · 批量导入与增量写入的取舍场景建议做法触发停写重建的信号一次性灌历史数据先停写全量导入后再统一建索引不需要天然是批量数据持续小批到达用构建更快的 IVF 承接写入IVF 召回不达标且能接受一段停写窗口数据持续大批到达增量写入 定期重建索引重建耗时已超过可接受的停写窗口一句话结论当索引构建速度跟不上数据到达速度时先停写、批量建完再开写比硬扛增量写入更省事。这也是你在传统库里「大表加索引要选维护窗口」的同一套判断。5.2 带过滤条件的检索老本行的主战场这是 DBA 最能占便宜的一维。向量检索常带业务过滤比如「只在某个分类里找相似片段」。问题在于过滤和向量检索谁先谁后结果和性能差很多。pgvector 官方仓库讲得很清楚使用近似索引时过滤是在索引扫描之后才生效的。并且举了一个具体数字——如果一个条件只命中 10% 的行在 HNSW 默认hnsw.ef_search为 40 的情况下平均只有 4 行能命中。也就是说你明明只想在某个分类里找 5 条索引却可能因为过滤发生在后面而返回不足。pgvector 从 0.8.0 起提供迭代索引扫描在结果不够时会自动多扫一部分索引。下面是带过滤检索的写法示意。⚠️代码待验证-- 近似索引下先看过滤命中比例再决定是否开迭代扫描SEThnsw.iterative_scanrelaxed_order;SELECTid,contentFROMdocsWHEREcategorytutorialORDERBYembedding[0.1, 0.2, ...]-- 余弦距离按距离升序LIMIT5;表 7 · 先过滤与后过滤的差别方式大致行为风险应对后过滤近似索引默认先按向量取候选再筛条件过滤命中比例低时候选里可用行太少开迭代扫描或给过滤列单独建索引先过滤精确检索友好先按条件缩小范围再算距离命中比例高时等于对大量行做全量计算命中比例极低时用精确检索分区 / 部分索引按条件物理切开数据分区键选错会失效按业务过滤维度分区Milvus 官方文档给了一组可对照的阈值过滤比例小于 85% 时图索引通常优于 IVF比例在 85% 到 95% 之间时用 IVF比例高于 98% 时用暴力检索最准。Qdrant 官方文档则强调要让过滤与图检索配合得好应在写入数据之前先建好 payload 索引否则需要重建 HNSW 索引。这两条都在说同一件事过滤不是查询期才想的它要在建库阶段就规划。大模型学习路线图这份资料把从零基础到能自己动手做 Agent 的每一步拆成了阶段表其中「检索与向量库」一节正好承接本文的五维判断。放在资料包里扫码即可获取第 6 章 · DBA 的三个可直接迁移的优势6.1 容量规划与索引调优思维上面第 4 章的粗算公式、第 3 章的参数旋钮本质都是你做了很多年的「先估容量、再调参数」。向量库只是把「行数 × 行宽」换成了「条数 × 维度 × 字节数」把「选择度」换成了「过滤命中比例」。你不必重新学一套方法论只需要把老公式里的变量名换掉。6.2 事务与一致性向量库不是只有搜得快这一个指标。写上去了但查不到、删了还在结果里、主从读到旧数据这些你在关系库里天天防的问题向量库同样存在。判断一个向量库能不能上生产除了看召回还要看它的写入可见性、删除语义与一致性模型怎么写。这是很多只从算法视角看向量库的人会漏掉的一层。6.3 运维与备份备份、恢复、监控、扩容——这套运维动作在向量库上照样要做只是对象从数据文件变成了「数据文件 索引结构」。近似索引有个额外的坑重建索引会带来一段可用性下降所以你得把重建窗口纳入运维排期就像过去给大表加索引要挑时间一样。第 7 章 · 什么时候不该上专用向量库7.1 反向判据转岗的人容易犯的错是把新工具当成必须用。向量库也有明确的不该上边界。表 8 · 该不该上专用向量库你的处境判断理由数据量小几万条以内先别上专用向量库精确检索就够快索引开销省了已经有 PostgreSQL 且体量可控优先 pgvector少一套系统要运维过滤条件复杂、强依赖多表关联优先关系库 向量扩展过滤与事务都在同一个库里数据量很大、写入吞吐高、延迟敏感考虑专用向量库可独立扩容、针对检索优化需要多路检索混合打分考虑专用向量库检索能力更完整7.2 用 PostgreSQL 就够的边界如果数据在几万条、向量维度也不夸张、业务查询就是按分类找相似那么给现有 PostgreSQL 装一个 pgvector 扩展通常比另起一套向量库更省事备份、权限、监控都能复用现有体系。这也是老本行占便宜最直接的体现——你不需要换掉熟悉的东西只需要给表加一个向量列和一个向量索引。⚠️代码待验证# 在已有 PostgreSQL 上启用 pgvector 扩展示意# 具体安装方式以你的 PostgreSQL 版本与操作系统官方说明为准psql-dyour_db-cCREATE EXTENSION IF NOT EXISTS vector;反过来当数据量和写入吞吐已经让表和索引都在同一个库里变成瓶颈时再拆出专用向量库才是划算的。7.3 收个尾向量库选型这件事算法背景的人容易从模型和榜单切入而你从索引、容量、过滤、运维切入反而更接近生产里真正会出事的地方。要补的新知识其实只有一块召回怎么量。把这一块补上剩下的五维里你有四维是现成的。640 套 AI 大模型行业报告 经典 PDF 书籍里面有大量向量检索与知识库落地的案例拆解可以和本文的选型判据对着看。放在资料包里扫码即可获取附表 A本文引用事实与出处对照表#事实出处本文位置1pgvector 支持 HNSW 与 IVFFlat 两种索引类型默认执行精确检索、结果完美召回加近似索引后同一查询结果会变pgvector 官方仓库 READMEgithub.com/pgvector/pgvector第 3 章 3.12pgvector HNSW 构建参数m默认 16、ef_construction默认 64查询参数hnsw.ef_search默认 40pgvector 官方仓库 README第 3 章 3.33pgvector IVFFlat 建议在建表有数据后再建索引lists起手值 100 万行以内取「行数/1000」、超过取「行数的平方根」probes起手值约为lists的平方根pgvector 官方仓库 README第 3 章 3.34采用近似索引时过滤在索引扫描之后生效条件命中约 10% 行、hnsw.ef_search为默认 40 时平均仅约 4 行命中pgvector 官方仓库 README第 5 章 5.25pgvector 自 0.8.0 起支持迭代索引扫描结果不足时自动多扫索引pgvector 官方仓库 README第 5 章 5.26pgvector 每个向量占「4 × 维度 8」字节向量最多 16000 维可建 HNSW 索引的vector最多 2000 维、半精度类型最多 4000 维pgvector 官方仓库 README第 4 章 4.27HNSW 论文题名《Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs》编号 arXiv:1603.09320Malkov、YashuninarXiv:1603.09320 摘要页第 3 章 3.28Qdrant 当前只用 HNSW 作为稠密向量索引m默认 16、ef_construct默认 100应在写入数据前先建 payload 索引否则需重建 HNSWQdrant 官方文档qdrant.tech/documentation/concepts/indexing第 3 章 3.2、第 5 章 5.29Milvus 给出的过滤比例阈值小于 85% 用图索引、85%–95% 用 IVF、高于 98% 用暴力检索约四分之一原始数据可进内存时考虑 DiskANNMilvus 官方文档milvus.io/docs/index-explained第 4 章 4.2、第 5 章 5.2附表 B术语速查表术语一句话解释在本文哪里用到向量vector一串浮点数用来表示一段文字或图片的语义第 1 章嵌入模型Embedding把文字转成向量的模型第 1 章向量库专门存向量并按距离最近检索的库第 1 章精确检索与每条向量逐个算距离结果最准但随数据量变慢第 3 章近似最近邻ANN只访问可能相近的一部分数据用少量召回换速度第 3 章HNSW分层可导航小世界图索引图索引的一种第 3 章IVF倒排文件先把向量聚类检索只进最近的少数几簇第 3 章召回率recallk前 k 条里找回了多少本该在前 k 的结果第 4 章lists / probesIVF 的聚类数建索引与查询时探测的簇数第 3 章迭代索引扫描结果不够时自动多扫一部分索引第 5 章payload 过滤按附加字段分类、时间等缩小检索范围第 5 章FP32单精度浮点每个数占 4 字节第 4 章写在最后这篇用到的资料写这篇文章时把相关的官方文档和源码又翻了一遍顺手也整理了几份配套的东西大模型学习路线图从零基础到能自己动手做 Agent按阶段说明每一步该学什么、哪些可以先跳过《LangChain LangGraph MCP 智能体开发实战》视频课7 个模块从私有化部署、EmbeddingRAG 到 MCPAgent 全流程AI 大模型知识库在线可查Agent Skills 从入门到落地、Claude Skills 完全指南等专题按目录浏览即可640 套 AI 大模型行业报告 经典 PDF 书籍看行业落地案例和别人怎么做的时候用得上大模型零基础到精通教学视频跟着敲一遍比只读文档快得多资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「AI」优先通过。资料按「先路线、再动手、最后查漏」的顺序整理好了建议先看学习路线那一份照着它挑一条适合自己当前基础的路径再往下看。