Milvus 数据结构存储 & 与 MySQL 异同
Milvus 数据结构存储 & 与 MySQL 异同
Leo
2026.08.26 · Updated 2026.09.13
Milvus 学习笔记
Milvus 数据结构存储 & 与 MySQL 异同
一、Milvus 的数据结构:层级关系
核心观点:Milvus 的数据组织逻辑和 MySQL 很像,但物理存储和索引机制完全不同。
Milvus MySQL 类比
─────────────────────────────────────────
Collection(集合) ≈ Table(表)
├── Field(字段) ≈ Column(列)
├── Entity(实体) ≈ Row(行)
├── Partition(分区) ≈ 分区表(可选)
├── Shard(分片) ≈ 分表
└── Segment(段) ≈ "数据文件"(无直接对应)
例:ai_diary 集合含 id、vector、content、date、mood、tags 共 6 个字段,插入 5 条日记 = 5 个 Entity。这部分和 MySQL 建表、插行几乎一一对应。
二、Milvus 特有核心:Segment(数据段)
这是 Milvus 和 MySQL 最大的结构差异。
- MySQL:数据是一个大表文件(按 B+Tree 组织),表是存储的物理单位。
- Milvus:一个 Collection 的数据会被自动切成多个 Segment,每个 Segment 是独立的存储 + 索引单元。
- Segment 两种状态:
- Growing Segment:数据刚写入,在内存里,可写但不能建索引;
- Sealed Segment:数据攒够(默认 512MB 或一定行数)"封口",落盘,异步建索引,之后才高效搜索。
这就是"近实时"概念——刚插入的数据在 Growing 阶段可查,但搜索性能不如 Sealed 阶段。
三、物理存储与写入路径
Milvus 写入一条数据的完整链路:
客户端 → 写入日志(消息队列,如 Pulsar/Kafka)
→ 内存缓冲(Growing Segment)
→ 攒够阈值 → flush 落盘成 Sealed Segment
→ 构建向量索引(HNSW/IVF 等)→ 可被快速检索
MySQL 则是就地更新 B+Tree 页,每次写入直接改磁盘页(配合 redo log 保证崩溃恢复)。
四、索引方式不同(本质区别)
| 维度 | MySQL | Milvus |
|---|---|---|
| 主要索引 | B+Tree(对单列/多列排序) | HNSW / IVF_FLAT / FLAT(对向量算距离) |
| 查询模型 | 精确匹配、范围、排序 | 相似度检索:找"最相似的 top-k" |
| 相似度度量 | 无 | 余弦(COSINE)/ 欧氏(L2)/ 内积(IP) |
| 返回结果 | 满足条件的行 | 最相近的 N 条 + 距离分数 |
IVF_FLAT + COSINE:把向量空间聚类成 nlist=1024 个桶,查询时先找相近的桶,再在桶内精确算余弦距离。
五、异同总结
相同点
- 都是数据库,都有"库表/集合、字段/列、行/实体"的概念
- 都支持增删改查、主键、索引、数据持久化
- 都有配套客户端 SDK(如
@zilliz/milvus2-sdk-node类似 MySQL 驱动)
不同点
| 维度 | MySQL | Milvus |
|---|---|---|
| 面向数据 | 结构化关系数据(OLTP) | 非结构化数据的向量(文本/图片/音频的 embedding) |
| 一致性 | 强一致(ACID 事务) | 分布式、近实时、最终一致 |
| 事务 | 支持完整事务 | 不支持跨集合事务 |
| JOIN | 支持多表 JOIN | 不支持 |
| 分布式 | 单机为主,集群要中间件 | 原生分布式(Proxy/Query/Data/Index 节点分离) |
| 物理单位 | 表文件(B+Tree 页) | Segment(列式文件 + 向量索引) |
| 适用场景 | 业务系统存储 | RAG 检索、推荐、去重、图片/语义搜索 |
一句话总结:MySQL 用 B+Tree 索引回答"哪些行符合条件",Milvus 用向量索引回答"哪几条和我最像"。实际系统里两者经常配合使用——MySQL 存业务主数据,Milvus 存 embedding 做语义检索,用 id 关联。
Leo
BloggerIndependent developer / Blogger and the maintainer of the original blog “大道至简”. Migrating years of posts and shiyu from WordPress to Next.js.
Reader comments
COMMENTS · 0Leave a comment