Segmenting
原文链接:https://www.yuque.com/yangguangfanxing/nmhuv1/wi8sesq43m5npm2q

基本概念
将向量集合拆分为多个段(segment)
插入:追加到当前活跃段(growing segment)

分段生命周期
- 插入向量时追加到活跃段
- 活跃段写满后,对其构建索引
- 同时打开一个新活跃段接收后续插入
- 查询时:搜索所有段,合并结果



删除:墓碑机制(Tombstones)
- 不真正删除向量,而是标记为已删除(墓碑)
- 避免昂贵的原地删除操作

合并:处理空洞
- 当段中大量向量被标记删除(含很多墓碑),段变"空"
- 合并这些几乎为空的段,回收空间


分布式:跨机器分配段
- 可以将不同段分配到不同机器
- 实现索引构建和查询的并行化

分段的好处
不再需要重建(No more rebuilds)
每个索引体积小,构建和搜索更快
活跃段 = 新鲜层(freshness layer),新数据可立即查询
易于分布式:可将段分配给不同分片(shard)并行处理
缺点
- 每次查询必须搜索所有段
- 若更新密集,会产生写放大(write amplification)
广泛应用于多种向量数据库,如 Milvus、Qdrant

分段 vs. 分片
| 维度 | 分片(Sharding) | 分段(Segmenting) |
|---|---|---|
| 目的 | 跨机器分布数据 | 避免重建索引、适应数据增长 |
| 作用于 | 单机也适用 | 单机也适用 |
| 增长方式 | 分片数固定,每个分片变大 | 分段数增长,每个段大小固定 |
| 侧重点 | 插入/写入性能 | 查询性能 |
两者可以协同工作:
- 按 key 分片(shard),每个分片内部再分段(segment)
- Qdrant、Milvus 均采用这种架构