Milvus vs Qdrant / Weaviate / Elasticsearch 架构对比笔记

目标:不是做产品营销式对比,而是从系统架构、状态组织、存储模型和适用工作负载角度比较它们。


1. 先给一句话判断

  • Milvus:最像“为向量/混合检索重构过的分布式数据库”,特别强调 segment lifecycle、WAL、控制面/数据面拆分。
  • Qdrant:更像“实现相对紧凑、工程上很清晰的向量检索引擎/数据库”,在单集群易用性和一致性工程上很强。
  • Weaviate:更像“带 schema/对象模型和上层 AI 功能整合较深的检索数据库平台”。
  • Elasticsearch:本质仍是全文检索/通用搜索引擎,向量是其已整合的能力之一,不是最初的核心抽象。

2. 对比应该看什么

如果按数据库内核视角,对比不该只看“支持哪些索引类型”,而该看:

  • 核心物理抽象是什么
  • mutation 的事实源是什么
  • 查询调度有没有专门控制面
  • 存储与计算是耦合还是分离
  • 后台整理(merge/compaction)如何做
  • 向量只是插件能力,还是系统主轴

3. Milvus:segment 驱动的分布式检索数据库

核心抽象

  • segment lifecycle
  • WAL / streaming
  • MixCoord + QueryCoordV2 + QueryNodeV2
  • object storage + local cache
  • C++ segcore 执行引擎

典型特征

  • 控制面和数据面拆分明显
  • 远端对象存储是一等公民
  • growing/sealed 双路径支撑实时 + 高效查询
  • background compaction / index build 体系成熟
  • 系统复杂度主要来自 placement 和状态协调

适合什么场景

  • 大规模向量数据
  • 需要独立扩缩 query / write 资源
  • 需要接近数据库级的后台任务和生命周期管理
  • 适合 cloud-native / K8s / 多节点环境

不足 / 成本

  • 架构复杂,读源码和运维门槛相对更高
  • 历史演进痕迹重,理解成本比轻量型产品高

4. Qdrant:更紧凑的向量数据库设计

这里主要给结构化对比视角,不展开具体源码细节。

我对 Qdrant 的结构化印象

  • 更强调 per-collection / per-segment 的本地引擎管理
  • 分布式能力有,但整体工程体量与抽象层次通常比 Milvus 更集中
  • 向量索引与 payload filter 的组合做得很直接
  • 从“易理解的检索系统”角度,通常比 Milvus 更容易整体把握

和 Milvus 的最大差异

  • Milvus 对控制面拆分更重:QueryCoordV2 / DataCoord / MixCoord / Streaming
  • Qdrant 整体往往更像“统一服务中的引擎 + 分片管理”
  • Milvus 的 object storage / async flush / segment lifecycle 体系更数据库化
  • Qdrant 往往更像“高质量向量引擎 + 分布式扩展”,Milvus 更像“向量导向数据库内核”

什么时候更像 Qdrant 占优

  • 希望系统更紧凑、理解更直接
  • 更看重部署和工程简洁性
  • 数据规模和控制面复杂度没有逼到必须上更重的数据库化拆分

5. Weaviate:对象模型和平台整合感更强

结构印象

Weaviate 的显著特点是:

  • 更突出 schema / class / object 层的产品表达
  • 更强调上层 AI / embedding / module integration
  • 对用户来说“平台感”更强

和 Milvus 的差异

  • Milvus 的内部叙事更偏数据库内核:segment、WAL、query coord、data coord
  • Weaviate 的外部叙事更偏“AI-native database platform”
  • 从底层系统味道看,Milvus 更像 infra/database engineer 的作品;Weaviate 更像平台/应用集成导向更强的系统

什么时候 Weaviate 更顺手

  • 需要更多 out-of-the-box AI module / object-level experience
  • 更偏应用开发者体验
  • 不想直接接触太多底层 segment / query placement 概念

6. Elasticsearch:向量是扩展能力,不是原点

核心抽象

Elasticsearch 的原生世界观仍然是:

  • document
  • inverted index
  • shard
  • segment merge
  • distributed search / aggregation

向量能力是后来强力集成进去的。

和 Milvus 的本质差异

Elasticsearch 的核心起点

  • 先是全文搜索 / 通用搜索平台
  • 再把向量检索能力加进来

Milvus 的核心起点

  • 先把向量 / 混合检索做成主轴
  • 再逐步补 full-text / sparse / BM25

也就是说:

  • ES:text-first, vector-added
  • Milvus:vector-first, text-being-integrated

结构上的对比

  • ES 的 shard/segment/merge 体系极成熟
  • ES 在文本检索、聚合分析、生态集成上仍然很强
  • Milvus 在大规模向量检索的系统抽象上更专门、更聚焦
  • Milvus 的 growing/sealed 路径、QueryCoordV2、Streaming/WAL 等设计,是围绕向量检索实时性和扩展性重做过的

什么时候 Elasticsearch 更合适

  • 全文检索、过滤、聚合分析是主需求
  • 向量只是增益项
  • 生态里已经深度使用 ES/OpenSearch

什么时候 Milvus 更合适

  • 向量 / hybrid retrieval 是主 workload
  • 需要更系统级的向量生命周期、分布式 query/write 解耦
  • 想把向量当一等公民而不是附属字段

7. 一个更直接的架构对照表

维度MilvusQdrantWeaviateElasticsearch
原始核心抽象segment + WAL + coord/nodevector segment / shard oriented engineobject/schema + AI modulesdocument + inverted index + shard
向量是不是主轴不是原始主轴
控制面拆分程度高,但围绕搜索集群模型
计算存储分离很强相对没那么激进通常更偏节点本地存储范式
对象存储中心性较低于 Milvus 的中心性非主叙事
growing / sealed 双路径很突出有类似实时/持久结构,但表述不同相对弱于 Milvus 的系统叙事传统 near-real-time 索引刷新模型
全文检索传统优势正在补强一般最强
系统复杂度
最像什么向量数据库内核紧凑型向量数据库/引擎AI 平台式向量数据库通用搜索引擎

8. 如果从源码学习价值来选

想学“向量数据库如何真正数据库化”

优先看 Milvus

你会学到:

  • WAL / streaming 事实源
  • segment lifecycle
  • QueryCoord / QueryNode 的 placement 与执行分层
  • 异步 index build / compaction / object storage

想学“更紧凑、工程更直接的向量检索系统”

优先看 Qdrant

想学“AI 平台化数据库产品如何组织能力”

Weaviate

想学“成熟搜索引擎怎样把向量能力收编进来”

Elasticsearch


9. 最后的判断

如果只从“架构深度”和“数据库系统味道”来评价,Milvus 在这几者里最像:

一个为向量/混合检索而重构过的分布式数据库内核。

如果只从“系统紧凑度和易于整体把握”来评价,Qdrant 往往更友好。

如果只从“全文生态和成熟搜索能力”来评价,Elasticsearch 仍然是另一类更强大的传统体系。

因此最合理的结论不是谁全面碾压谁,而是:

  • Milvus:最适合研究向量数据库内核化
  • Qdrant:最适合研究紧凑型向量系统工程
  • Weaviate:最适合研究 AI 平台化产品表达
  • Elasticsearch:最适合研究全文系统如何向量化扩展