<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>检索 on Chico's Tech Blog</title><link>https://realtime-ai.chat/tags/%E6%A3%80%E7%B4%A2/</link><description>Recent content in 检索 on Chico's Tech Blog</description><image><title>Chico's Tech Blog</title><url>https://github.com/chicogong.png</url><link>https://github.com/chicogong.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 21 Apr 2026 11:00:00 +0800</lastBuildDate><atom:link href="https://realtime-ai.chat/tags/%E6%A3%80%E7%B4%A2/index.xml" rel="self" type="application/rss+xml"/><item><title>向量数据库 2026:还需要专用的吗</title><link>https://realtime-ai.chat/posts/vector-db-2026/</link><pubDate>Tue, 21 Apr 2026 11:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/vector-db-2026/</guid><description>pgvector 已经能扛住大多数 RAG 业务,Milvus、Qdrant 这些专用向量库在 2026 年到底什么时候才真的需要?这篇按规模、过滤、混合检索给一份选型判断。</description><content:encoded><![CDATA[<p>三年前做一个带检索的 AI 功能,默认动作是去注册一个 Pinecone,或者在 k8s 上拉起一套 Milvus。&ldquo;做向量检索就得有向量数据库&rdquo;,这是当时的常识。</p>
<p>2026 年我不会这么干了。我现在的默认动作是反问一句:<strong>你的业务数据是不是已经在 Postgres 里了?</strong> 如果是,那大概率你不需要再多一个数据库——装个 <code>pgvector</code> 扩展就够了。</p>
<p>这不是图省事。这两年向量检索这个领域发生了一件挺反常识的事:<strong>专用向量数据库的护城河,被&quot;在已有数据库里加一个向量列&quot;这件事填掉了一大半。</strong> 这篇就讲清楚这件事是怎么发生的,以及——什么场景下你还是真的需要一个专用的。</p>
<h2 id="向量检索这两年变了什么">向量检索这两年变了什么</h2>
<p>先说结论:向量检索从&quot;一项需要专门系统的黑科技&quot;,退化成了&quot;一种索引类型&quot;。</p>
<p>2022、2023 年的时候,向量检索确实特殊。HNSW 索引怎么建、近似最近邻(ANN)怎么调参、召回率和延迟怎么权衡,这些都是新东西,通用数据库根本不支持。你想做语义检索,除了上专用向量库没有别的选择。专用向量库的价值,很大程度上来自于&quot;别人还做不了&quot;。</p>
<p>到 2026 年,情况倒过来了。HNSW 这种图索引已经是成熟、公开、被反复实现的算法,不再是谁家的秘密。<code>pgvector</code> 作为 Postgres 扩展,把 HNSW 和 IVFFlat 索引、多种距离度量、半精度存储这些都做齐了;0.8 版本之后还补上了&quot;迭代索引扫描&quot;(iterative index scan),专门解决带过滤的向量查询里那个老大难问题——后面会细讲。</p>
<p>换句话说,<strong>&ldquo;做向量检索&quot;这件事本身,已经不构成开一个新数据库的理由了。</strong> 它现在更像是&quot;我需要一个 JSON 字段&quot;或者&quot;我需要全文检索&rdquo;——你的现有数据库基本都能干,只是早几年还不行。</p>
<p>专用向量库不是没价值了,而是价值的位置变了:它不再赢在&quot;能不能做&quot;,而是赢在&quot;做到什么规模、做得多快、过滤多复杂&quot;。这是一个量变到质变的边界问题,而不是一个有无问题。</p>
<h2 id="pgvector-为什么吃掉了大半场景">pgvector 为什么吃掉了大半场景</h2>
<p>把向量检索塞进 Postgres,带来的好处不是&quot;少装一个软件&quot;这么肤浅。真正值钱的是下面三件事。</p>
<p><strong>第一,数据不用搬,事务是一致的。</strong> 绝大多数 AI 功能不是孤立的——一段文档的 embedding,总是挂在某个用户、某个项目、某个权限边界下面。如果向量在专用库、业务数据在 Postgres,你就得自己维护两套数据的同步:文档删了,向量要跟着删;权限变了,检索结果要跟着变。这套同步逻辑写起来不难,但它是一类<strong>永远会出 bug 的胶水代码</strong>——双写失败、顺序错乱、补偿任务追不上。向量和业务数据待在同一个 Postgres 事务里,这一整类问题直接不存在。</p>
<p><strong>第二,过滤就是普通的 SQL <code>WHERE</code>。</strong> &ldquo;找语义相近的文档,但限定这个用户、这个时间段、状态是已发布&rdquo;——这种带元数据过滤的检索是 RAG 里的常态,几乎没有哪个真实业务是纯粹的全库 ANN。在 pgvector 里,这就是一条 SQL,<code>WHERE</code> 子句和向量排序写在一起,还能直接 JOIN 业务表。在专用向量库里,过滤得靠它自己那套 payload/metadata 过滤机制,表达能力通常比 SQL 弱,跨&quot;表&quot;的关联更是做不了。</p>
<p><strong>第三,运维你已经会了。</strong> 你的团队大概率已经在跑 Postgres——有人会调参,有备份,有监控,有高可用方案。pgvector 只是这台已有机器上的一个扩展,不增加任何新的运维面。而 Milvus 是一套认真的分布式系统,etcd、对象存储、查询节点、数据节点分开,通常得跑在 k8s 上,得有人专门盯着。这个运维成本,小团队最容易低估。</p>
<p>再加上一个关键事实:<strong>大多数 RAG 业务的数据量,比你以为的小得多。</strong> 一个 B2B SaaS 产品,把所有客户的所有文档切块做 embedding,常常也就几十万到几百万条向量。公开的评测和生产经验里有个反复出现的数字——<strong>1000 万条向量以下,pgvector 在端到端延迟、成本、运维复杂度上,综合体验是最好的。</strong> 单节点 Postgres 配置得当能撑到接近 5000 万条向量,这个区间覆盖了绝大部分企业级 RAG 产品。</p>
<p>所以&quot;默认 pgvector&quot;不是保守,是 2026 年对大多数场景最合理的工程判断。</p>
<h2 id="那专用向量库什么时候才真的需要">那专用向量库什么时候才真的需要</h2>
<p>把 pgvector 夸完了,得诚实地说它的天花板在哪。三个信号,出现任何一个,你就该认真考虑专用向量库了。</p>
<p><strong>信号一:规模真的大。</strong> 这里说的&quot;大&quot;是几千万到十亿级的向量,而且还在涨。pgvector 的硬上限是单节点 Postgres 的上限——内存装不下索引、HNSW 索引构建时间长到离谱、单机扛不住并发。<code>pgvectorscale</code> 这个扩展能用 StreamingDiskANN 把索引下放到磁盘,把这个上限往后推一截,值得先试。但如果你的向量是亿级、要分布式分片、要水平扩容,那就是 Milvus 的主场——它在生产里被部署到几亿乃至十亿级向量是常规操作,搜索公司、电商、基因研究都在这个量级用它。</p>
<p><strong>信号二:过滤又重又刁钻。</strong> 注意,这跟前面说 pgvector 过滤强不矛盾。pgvector 的强项是<strong>过滤的表达能力</strong>(SQL 想怎么写怎么写);它的弱项是<strong>高过滤率下的检索性能</strong>。近似索引的本质矛盾是:先扫索引拿候选,再套过滤条件——如果过滤条件只命中全库 1% 的行,HNSW 默认 <code>ef_search</code> 才 40,扫出来平均可能一条都不剩。pgvector 0.8 的迭代索引扫描缓解了这个问题(不够就继续扫,直到够数),但它是&quot;打补丁&quot;,不是&quot;原生为过滤设计&quot;。Qdrant 走的是另一条路:payload 感知的索引,让带过滤的检索性能接近不带过滤。如果你的核心场景就是<strong>在一个大库的某个过滤子集上做高 QPS 检索</strong>,Qdrant 是 2026 年的默认答案。</p>
<p><strong>信号三:延迟和吞吐被压到极限。</strong> 公开评测里,Qdrant 在 100 万向量、召回率 95% 以上时能做到约 1840 QPS,p99 延迟约 12ms,是开源里最快的一档;Milvus 约 18ms,Weaviate 约 16ms。pgvector 在 1000 万以下做得也不错,但当你的检索 QPS 很高、又卡着严格的 p99,专用库用 Rust/C++ 写的查询引擎、更精细的索引控制,确实能再榨出一截。这是个&quot;边际收益&quot;问题:大多数业务感知不到这一截,少数高频检索的业务很在意。</p>
<p>把这三个信号反过来说:<strong>如果你的向量在千万以下、过滤用 SQL 能舒服表达、对延迟没有极端要求——你三个信号一个都没踩中,那就别折腾,pgvector。</strong></p>
<pre class="mermaid">flowchart TD
  A[要做向量检索] --> B{数据已经在<br/>Postgres 里?}
  B -- 是 --> C{向量量级?}
  B -- 否 --> D{团队已有<br/>关系型数据库?}
  C -- 1000 万以下 --> E[pgvector<br/>默认选择]
  C -- 1000 万-5000 万 --> F{过滤重 / 延迟苛刻?}
  C -- 亿级以上 --> G[Milvus<br/>分布式专用库]
  F -- 否 --> H[pgvector + pgvectorscale]
  F -- 是 --> I[Qdrant]
  D -- 是 --> E
  D -- 否 --> J[Qdrant<br/>轻量专用库起步]
  style E fill:#cfe8d5,stroke:#4c9a6a
  style G fill:#fde7c2,stroke:#e8b23c
  style I fill:#fde7c2,stroke:#e8b23c
</pre><h2 id="混合检索专用库重新拿回的一分">混合检索:专用库重新拿回的一分</h2>
<p>前面说专用库护城河被填了一大半,<strong>混合检索是它们守住的那一小半。</strong></p>
<p>纯向量检索有个真实的弱点:它擅长&quot;意思相近&quot;,但对&quot;必须精确出现的词&quot;反而不灵。用户搜一个产品型号 <code>SKU-7741X</code>、一个错误码 <code>ERR_0x80</code>、一个人名,语义相似度模型很可能给你一堆&quot;意思差不多但型号不对&quot;的结果。这种场景下,老派的关键词检索(BM25)反而准。</p>
<p><strong>混合检索</strong>就是把两者揉在一起:稠密向量负责&quot;语义&quot;,稀疏的 BM25 负责&quot;精确词命中&quot;,再用一个排序融合(比如 RRF)把两路结果合并。2026 年这基本是 RAG 检索质量的标配,而不是加分项。</p>
<p>这件事上,各家差距很明显:</p>
<table>
  <thead>
      <tr>
          <th>数据库</th>
          <th>混合检索现状</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Weaviate</td>
          <td>原生 BM25 + 稠密向量 + 元数据过滤,一条查询搞定,体验最完整</td>
      </tr>
      <tr>
          <td>Qdrant</td>
          <td>原生支持稀疏向量与稠密向量,内置融合,做混合检索很顺手</td>
      </tr>
      <tr>
          <td>Milvus</td>
          <td>支持,但更偏纯向量检索的大规模场景</td>
      </tr>
      <tr>
          <td>pgvector</td>
          <td>能做——pgvector 管向量,Postgres 的全文检索管 BM25,但<strong>要自己写融合逻辑</strong>,把两路分数缝起来</td>
      </tr>
  </tbody>
</table>
<p>pgvector 在这一项上是&quot;能做但不优雅&quot;:两套排序、两套分数,RRF 融合得自己写在 SQL 或应用层。能跑,但不如 Weaviate 那种&quot;一条查询返回融合结果&quot;省心。</p>
<p>所以如果检索质量是你的产品核心、混合检索要做得讲究——这是天平往专用库(尤其 Weaviate)倾斜的一个实打实的理由。如果混合检索对你只是&quot;锦上添花&quot;,pgvector 自己拼一套也能用。</p>
<h2 id="托管还是自建">托管还是自建</h2>
<p>选完&quot;哪个数据库&quot;,还有一道正交的题:托管云服务,还是自己部署。</p>
<p>参考一下 2026 年的大致价位,1000 万向量量级:Pinecone Serverless 约每月 70 美元,Qdrant Cloud 约 65 美元,Weaviate Cloud 约 135 美元,而 pgvector 跑在 RDS 上大约 45 美元。这个区间里,差价是噪音,不值得为省几十美元纠结。</p>
<p>真正拉开差距的是<strong>两个极端</strong>:</p>
<ul>
<li><strong>量级很小、又不想多维护一个系统</strong>:数据已经在托管 Postgres(RDS、Aurora、Supabase)里的话,pgvector 几乎零边际成本——你连&quot;选型&quot;都不用做。</li>
<li><strong>量级很大(上亿向量)</strong>:托管和自建的成本差会放大到很夸张的程度。同样的亿级负载,Pinecone 这类全托管的账单能到自建 Qdrant 或 Milvus 的 3 到 5 倍。这个量级,自建省下的钱足够养一个专门运维的人。</li>
</ul>
<p>中间地带的判断很简单,就一句话:<strong>算清楚你那个专门维护数据库的工程师,一年值多少钱。</strong> Pinecone 这种全托管的卖点从来不是便宜,是&quot;你完全不用管它&quot;——没有节点、没有索引调参、没有半夜被叫起来。对一个还没有专职 DBA、工程师时间比服务器贵得多的小团队,多付的托管费通常划算。反过来,已经有成熟基础设施团队、规模又上来了,自建 Qdrant/Milvus 的性价比会明显反超。</p>
<p>我的经验法则:<strong>早期一律托管</strong>(包括直接用托管 Postgres 的 pgvector),把精力留给产品;<strong>等规模和团队都长起来了,再谈自建。</strong> 别在第一天就为一个还不存在的扩容问题,提前背上运维负担。</p>
<h2 id="一张表收尾按规模和场景怎么选">一张表收尾:按规模和场景怎么选</h2>
<p>把上面所有判断压成一张可以贴在工位上的表:</p>
<table>
  <thead>
      <tr>
          <th>场景</th>
          <th>向量量级</th>
          <th>推荐</th>
          <th>理由</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>数据已在 Postgres,常规 RAG</td>
          <td>&lt; 1000 万</td>
          <td><strong>pgvector</strong></td>
          <td>零新增系统,事务一致,SQL 过滤</td>
      </tr>
      <tr>
          <td>没有关系型数据库,轻量起步</td>
          <td>&lt; 1000 万</td>
          <td><strong>Qdrant</strong>(托管)</td>
          <td>上手快,过滤性能好,后续好扩</td>
      </tr>
      <tr>
          <td>检索质量是核心,混合检索要讲究</td>
          <td>任意</td>
          <td><strong>Weaviate</strong></td>
          <td>原生 BM25 + 向量,融合开箱即用</td>
      </tr>
      <tr>
          <td>大库 + 高过滤率 + 高 QPS</td>
          <td>1000 万 ~ 数亿</td>
          <td><strong>Qdrant</strong></td>
          <td>payload 感知索引,过滤几乎不掉速</td>
      </tr>
      <tr>
          <td>亿级以上,要分布式水平扩容</td>
          <td>&gt; 1 亿</td>
          <td><strong>Milvus</strong></td>
          <td>为超大规模分布式设计</td>
      </tr>
      <tr>
          <td>想留在 Postgres 但超了单机上限</td>
          <td>1000 万 ~ 5000 万</td>
          <td><strong>pgvector + pgvectorscale</strong></td>
          <td>DiskANN 把索引下放磁盘</td>
      </tr>
  </tbody>
</table>
<p>最后留一句话。三年前&quot;做 AI 检索就得上专用向量库&quot;是对的,因为别人确实做不了。2026 年这句话已经过期了——<strong>专用向量库依然优秀,但它现在要靠规模、过滤、混合检索这些具体的硬指标来赢得你,而不是靠&quot;向量检索&quot;这四个字本身。</strong> 选型的第一步不再是&quot;挑哪个向量库&quot;,而是先诚实地问自己:我真的到了需要它的那条线了吗?</p>
<p>大多数人,还没到。</p>
]]></content:encoded></item></channel></rss>