土法炼钢兴趣小组的算法知识备份

【向量检索引擎】Delete · Upsert · TTL:软删、覆盖写与过期回收

文章导航

分类入口
databasestorage
标签入口
#milvus#delete#upsert#ttl#bitset#compaction#soft-delete#vector-engine

目录

向量库的变更不只有 insert。删除、按主键覆盖、按 TTL 过期,都会碰到同一套底层机制:先让搜索看不见,再在 compaction 中物理回收第 8、10、11 篇)。本文按 2.6.x 用户文档钉语义,不写成 SDK 百科。

本文是「向量检索引擎」系列第 13 篇(共 18 篇)。→ 系列目录

版本锚定:Milvus 2.6.x Delete EntitiesUpsert EntitiesSet Collection TTL / Create Collection(TTL 属性)、Bitset


一、Delete:过滤或主键

Delete Entities:可按 过滤表达式主键 删除;也可限定 Partition。

复杂过滤可用 Filter Templating 降低解析成本(第 11 篇)。Delete 走 DML 路径进入 Streaming / WAL(Architecture API 表),与 insert 一样进入时间戳与顺序体系。

1.1 软删:bitset

Bitset:删除信息紧凑存在段内 bitset;标记删除的实体在 search/query 不参与计算。Streaming Service 还写明 Query Delegator 负责向 Query Node 广播 Delete——历史段上的可见性靠删除传播,而不是立刻重写整图索引。

因此:

\[ \text{删除成功(逻辑)} \;\Rightarrow\; \text{后续搜索应不可见(在一致性水位满足时)} \]

\[ \text{对象存储字节回收} \;\Leftarrow\; \text{compaction 等后台过程(第 10 篇)} \]

两者不是同一时刻。


二、Upsert:insert 或 update

Upsert Entities:按请求中的主键是否已存在,决定插入新实体或更新已有实体。

2.1 Override 模式

官方:override 模式的 upsert 组合 insert 与 delete——对已存在主键,插入请求载荷中的新数据,并删除原主键对应旧实体。

若主键字段开启 autoID:请求仍须带目标实体主键以便定位;Milvus 用该主键定位待替换实体,并为载荷生成 新主键 再插入(官方说明)。这意味着 override 在 autoID 下不是「原地改同一主键行」的朴素想象,读文档示例时要对齐。

2.2 Merge 模式

官方还提供 merge 模式(与 override 相对):在已有实体上合并字段更新。具体字段级规则以 Upsert Entities 当前文档为准;本系列强调引擎后果——更新仍表现为日志上的变更 + 旧版本通过删除/合并语义退出搜索集,最终空间回收靠后台整理。


三、TTL:过期策略

Create Collection / Set Collection TTL:通过属性 collection.ttl.seconds(整数秒)配置集合 TTL。数据超过 TTL 后由系统自动删除。

官方明确:

因此 TTL 与手工 delete 共享同一类工程间隙:逻辑不可见 ≠ 磁盘立刻变小。容量规划不能假设「TTL=14 天则对象存储精确保持 14 天字节」。

若文档版本提及实体级 TTL 字段与集合级 TTL 互斥等扩展,以你部署的 minor 版本文档为准;本篇以 2.6 常用的 collection.ttl.seconds 为主。


四、与一致性、过滤的交叉

操作 与一致性 与过滤
delete 可见性受 GuaranteeTs 约束(第 12 篇) delete 本身可用 filter
upsert 新版本可见性同上 旧版本应退出结果集
TTL 过期后结果排除 常与业务「保留窗口」对齐

RAG 场景:文档撤回应用 delete + 足够一致性,不能只靠应用缓存失效而向量库仍返回旧块。


五、学术谱系、工程间隙、开放问题

5.1 谱系

软删 + 后台合并是 LSM/列存常见模式;向量引擎额外要求删除掩码进入 ANN 查询(Knowhere bitset),否则图游走仍可能返回已删近邻。

5.2 工程间隙

5.3 开放问题

  1. 删除广播延迟与多副本历史段的上界?
  2. upsert merge 与多向量字段部分更新的索引增量策略?
  3. TTL 与湖仓 snapshot 保留策略如何对齐同一业务日历?

六、小结

Delete/Upsert/TTL 首先改变 可见性(bitset / 过期过滤),其次才在 compaction 中回收空间。Upsert override 本质近 delete+insert。下一篇:副本、负载与故障恢复


参考资料

  1. Milvus Documentation v2.6.x, Delete EntitiesUpsert Entities
  2. Milvus Documentation v2.6.x, Set Collection TTL / Create Collectioncollection.ttl.seconds)。
  3. Milvus Documentation v2.6.x, BitsetStreaming Service(Delete 广播)。
  4. 第 8、10、11、12 篇系列 index

返回 系列目录 | 上一篇:一致性模型 | 下一篇:副本与故障恢复

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-12 · database / storage

【向量检索引擎】Data Node:compaction 与 index build

说明 Milvus 2.6.x 中 Data Node 作为离线 Worker 如何承接 Coordinator 下发的建索引与 compaction,输入输出如何进出对象存储,以及索引堆积与 handoff 如何影响查询新鲜度与资源争用。


By .