当前位置:
AIGC文章详情

Milvus 3.0 发布三周:劝退人的坑填了,没劝退的还在

源自90位全网作者

15:33

8 月 4 日,Zilliz 官宣 Milvus 3.0 开源,官方称之为"Milvus 项目发布以来最重磅的架构升级"。知乎

三周过去,涟漪扩散得很远。官方专栏连发深度解读,B 站培训机构把"Milvus 3.0 新特性"做进了大模型面试课。哔哩哔哩Spring AI Alibaba 的用户也已经发出了集成实录。知乎

但另一边的声音更有意思。最近知乎讨论度最高的向量数据库文章之一,是一篇踩坑复盘,作者做完几个 RAG 项目后直言,别把维护 Milvus 想象成维护 MySQL 那么简单,否则真的半夜睡觉都不踏实。知乎还有一位工程师把自己的 ES 检索从 40 秒优化回 4 秒,复盘标题就叫《我没有换数据库》,而"一上来就迁 Milvus"被他列为当时考虑过的弯路之一。知乎

一边是官方的里程碑,一边是社区的避坑帖。这两种声音并不矛盾——它们说的不是同一个 Milvus。今天把官方发布说明、官方解读和社区复盘放在一起对一遍:3.0 到底填了哪些坑,哪些坑还在,以及值不值得你为它花迁移和学习成本。

社区到底在抱怨什么

先说清楚,抱怨 Milvus 的人,很少抱怨它"检索慢"。抱怨集中在三件事。

第一件,运维太重。Milvus Standalone 单机版没什么问题,docker-compose 十分钟能跑起来。但生产环境上 Cluster 集群版,etcd、对象存储、消息队列就全成了核心依赖,哪个伺候不好都不行。知乎那篇三库横评里,作者直接引用了朋友公司放弃 Milvus 换 Qdrant 的真实理由,不想养着一个月薪 3 万的 Milvus 运维,性价比太低。知乎

第二件,数据要搬两遍。很多团队的 Embedding 本来就躺在数据湖里——Lance 表、Iceberg 表、Parquet 文件,或者直接堆在 S3 上。以前想让这些数据被检索,只有两条路:复制一份灌进向量数据库,多一份存储副本加一条复杂的 ETL 同步链路;或者对着数据湖暴力扫描,没有 ANN 索引,延迟根本过不了生产。对数据治理要求高的团队,这两条路都走不通。

第三件,检索完了活才干一半。向量数据库负责"找到",但业务要的是"答案":按品牌筛选、按价格销量排序、按类目做分面统计。这些以前都得把结果拉回应用层,用 pandas 和业务代码自己做。官方解读里算过一笔账,一个过滤条件命中两百万行,客户端要搬几百 MB 数据,最终答案可能只有几 KB,为了几 KB 的答案搬运几百 MB 的数据,中间差着五个数量级。知乎更要命的是,应用层做分页加排序很容易埋一个不报错的 bug——你排的只是当前页的顺序,不是全局结果集。

这三件事对应三种真实成本:运维人力、数据搬运与治理、应用层开发与纠错。判断这次升级值不值,算的是这三笔账,不是"快了多少"。

Milvus 3.0 发布三周:劝退人的坑填了,没劝退的还在

3.0 对着痛点改了什么

Milvus 3.0 的官方叙事很宏大:湖原生、Vector Lakebase(向量数据湖基座)。剥开概念看,新功能基本都能对到上面三个抱怨上。

数据不用搬了,对应 External Collections(外部集合)。这是 3.0 最核心的架构变化:你可以把对象存储上的数据集直接"链接"进 Milvus,外部字段映射到 Schema,Milvus 原地构建向量索引、BM25 倒排索引、JSON 索引和标量索引。知乎数据集更新时,只对新增加的分片增量建索引,不用全量重建。官方的说法是让用户数据安心留在湖里,Milvus 主动走向数据。

但要划重点,官方自己补了一句:写入频繁、延迟极度敏感的在线业务,原生 Collection 依然是最佳选择。External Collections 专供数据源在 Milvus 之外、需要长期留存的场景。它不是万金油,是定向药。

为了让对象存储扛得住检索后的随机点查,3.0 还重写了存储引擎,推出 Loon(Storage v3),默认采用 Vortex 列式格式。知乎官方内部测试(300 万行、128 维向量、S3 存储、256 个并发读取器)显示读放大被大幅压低。官方也很坦诚:无论如何优化对象存储,都无法媲美本地内存的物理极限,Loon 的价值是把原本不可接受的读放大降到实用区间。

改 Schema 不用重建了,对应在线 Schema 演进。生产环境的 RAG 系统换 Embedding 模型、加字段是常态,以前改模型基本等于重建 Collection、全量重导。3.0 支持不中断服务地增加和删除字段,改的是 Collection Manifest,不重写已有数据文件,再配合两条回填路径补数据。知乎对频繁迭代模型的团队,这一条能省掉很多次通宵。

Milvus 3.0 发布三周:劝退人的坑填了,没劝退的还在

Snapshot(快照)是给高风险操作准备的。它是某个时间点的只读视图,只记录对现有文件的引用,不物理复制数据,创建成本极低,适合模型切换、Embedding 重生成、Schema 变更之前留一个逻辑恢复点。官方特意提醒,Snapshot 不能代替数据备份方案,它是逻辑恢复点,不是灾备,这两件事别混。知乎

胶水代码被收编了,对应服务端 ORDER BY 和聚合。3.0 的 query 支持 GROUP BY 加 count/sum/avg/min/max,search 和 query 都支持按标量字段排序,search 结果还能做分层分桶统计,语义对标 Elasticsearch 的 aggregation。排序和分页在引擎内按正确顺序组合——offset 在排序之后生效,"第二页"是全局意义上的第 11 到 20 名,应用层没有机会再做错。

这里必须把三个边界说清楚。第一,Search 聚合目前不支持 Hybrid Search。知乎第二,Search 聚合统计的是本次召回的候选集,不是全量数据分布,要全量精确统计请用 Query 聚合。第三,Join、窗口函数、复杂子查询不在能力范围内,Milvus 没有变成通用分析数据库,只是把围绕在线检索的结构化计算收了回去。

性能上还有两项。稀疏向量索引体积压缩到 2.6 版本的约三分之一。知乎针对 SPLADE 这类学习型稀疏向量新增 SINDI 算法,官方在四个数据集上测试,QPS 约为 MaxScore 算法的 5 到 10 倍。这两项都是官方内部测试口径,生产使用前建议用自己的数据复测。

Milvus 3.0 发布三周:劝退人的坑填了,没劝退的还在

离线闭环也打通了。3.0 提供 Spark DataSource V2 接口,Spark、Databricks、EMR 任务可以像操作传统数据库一样直接读写 Milvus,去重、聚类、效果评估、产出训练集这套离线迭代,不用再把整个 Collection 导出到别的系统。

没填的坑,也得说清楚

Cluster 的运维复杂度基本没变。自己部署的用户,etcd、对象存储、消息队列这套依赖还在。知乎3.0 降低的是数据侧的成本,没降低组件侧的成本。没有专职运维,自建 Milvus Cluster 依然要掂量。

SDK 还在路上。官方措辞是 pymilvus、RESTful v2、Go SDK 陆续覆盖新语义,意味着各语言接口没有全部就位,升级前先确认你在用的 SDK 版本。知乎

3.0 的生产复盘目前是空白。发布三周,社区里流传的是官方解读、机构教程和集成实录,"我们用 3.0 上了生产"的真实复盘还没有出现。当第一批吃螃蟹的人,还是等案例再说,本身就是一个需要做的判断。

至于 Cardinal 引擎比开源版快 10 倍,那是商业版 Zilliz Cloud 的宣传口径,不是开源 Milvus 3.0 的性能承诺,这两件事不要混在一起。知乎

不同的人怎么选

结合社区复盘和 3.0 的变化,给几条参考线。

单表数据 500 万以内、公司本来就是 PostgreSQL 栈:pgvector 就够用。横评作者的经验是 100 万以内无脑用,上限不要超过 500 万。知乎这个量级,3.0 的新特性大多与你无关。

500 万到 5000 万、没有专职运维:Qdrant 或 Milvus Standalone。这个区间竞争最激烈,判断标准不是性能跑分,而是"谁来运维"。

千万到亿级、有专职运维或愿意外包运维:3.0 值得认真评估。尤其当你的数据本来就在对象存储和数据湖里,External Collections 能直接省掉一条 ETL 同步链路,这笔账很好算。

已经在跑 Milvus 2.x:ORDER BY 和聚合是实打实的收益,升级动力存在。但建议先在非核心 Collection 试点,确认所用语言的 SDK 已覆盖需要的接口,再安排生产切换。

准备大模型面试的同学注意,Milvus 3.0 已经进了培训机构的考点清单。哔哩哔哩External Collections、Storage v3、Snapshot 这三个关键词值得记住,面试官很可能问"3.0 和 2.x 的架构区别"。

Milvus 3.0 发布三周:劝退人的坑填了,没劝退的还在

还在观望的,我们的建议只有一句:先证明现有栈解决不了你的瓶颈,再考虑换或升级。那篇 ES 优化复盘就是最好的注脚——40 秒变 4 秒,最关键的一步是补内存和修掉一个空查询分支,一个组件都没换。知乎

接下来值得盯的三个信号

一是 Search 聚合什么时候支持 Hybrid Search、Query 聚合什么时候支持按聚合结果排序,官方说这两项都在演进中。二是各语言 SDK 全量覆盖 3.0 语义的时间点。三是社区第一篇 3.0 生产复盘什么时候出现——尤其是 External Collections 在真实在线流量下的表现,它决定了"湖原生"是架构愿景,还是生产可用的选项。

Milvus 3.0 真正的意义,可能不是检索更快,而是终于开始认真回答"用向量数据库到底要多贵"这个问题。数据不用搬、Schema 不用重建、胶水代码被收编,这三件事如果都兑现,社区里的踩坑帖会少很多。但在生产案例出现之前,"值得"这两个字先保留一半,另一半,等第一批吃螃蟹的人替我们写完。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章