Skip to content

Segmenting

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

基本概念

  • 将向量集合拆分为多个段(segment)

  • 插入:追加到当前活跃段(growing segment)

分段生命周期

  1. 插入向量时追加到活跃段
  2. 活跃段写满后,对其构建索引
  3. 同时打开一个新活跃段接收后续插入
  4. 查询时:搜索所有段,合并结果

删除:墓碑机制(Tombstones)

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

合并:处理空洞

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

分布式:跨机器分配段

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

分段的好处

  • 不再需要重建(No more rebuilds)

  • 每个索引体积小,构建和搜索更快

  • 活跃段 = 新鲜层(freshness layer),新数据可立即查询

  • 易于分布式:可将段分配给不同分片(shard)并行处理

缺点

  • 每次查询必须搜索所有段
  • 若更新密集,会产生写放大(write amplification)

广泛应用于多种向量数据库,如 Milvus、Qdrant

分段 vs. 分片

维度分片(Sharding)分段(Segmenting)
目的跨机器分布数据避免重建索引、适应数据增长
作用于单机也适用单机也适用
增长方式分片数固定,每个分片变大分段数增长,每个段大小固定
侧重点插入/写入性能查询性能

两者可以协同工作

  • 按 key 分片(shard),每个分片内部再分段(segment)
  • Qdrant、Milvus 均采用这种架构

用心记录,持续成长