第 117 题:向量索引的增量更新,动态图索引的合并策略?
题目
向量索引的增量更新,动态图索引的合并策略?
完整讲解
一、向量索引的增量更新需求
底库会持续增删:新 item 上线、下架、用户行为更新导致嵌入变化。若每次全量重建索引,耗时长、期间服务可能不可用或读旧索引。增量更新即在已有索引上只更新变化部分,尽量保持高召回与低延迟。
二、图索引(如 HNSW)的增量特性
- 天然支持插入:HNSW 等图索引单点插入是标准操作:新向量找入口、逐层贪心找邻居、连边并限制每层 $M$ 条。插入复杂度约 $O(\log N)$ 层 × 每层搜索,无需重算全图。
- 删除:图索引通常不真正删节点(会破坏图连通与邻居指针),常见做法是逻辑删除:在结果中过滤掉已删 ID;或维护「删除位图」,检索后过滤。物理删除需重建局部或全量,成本高。
- 更新:若向量内容变化,可视为「删旧 + 插新」;或保留节点、只更新节点上的向量与距离计算,取决于实现(多数实现仍推荐删+插)。
三、动态图索引的合并策略
- 多图合并:维护多个子图(如按时间或批次建的小图),查询时并行在各子图搜索、合并结果再排序(多路归并 Top-K)。新增数据先写入增量小图,积累到一定量再将小图与主图合并:遍历主图与增量图,对增量图中的点做「插入主图」操作,或重建主图时把增量图节点一起加入。
- 合并时机:定时(如每小时);或增量图大小/条数达阈值时触发合并。合并期间可双读(读旧主图 + 增量图)保证不丢新数据,合并完成后切换。
- 层级/分层索引:底层为「热」数据、小图常合并;上层为冷数据、大图少合并,减少全量重建频率。
四、与 IVF 的对比
IVF 增量:新向量算最近中心、加入对应桶即可;桶内可排序或子索引。删除同样多逻辑删除。合并时若聚类中心重算,则需重分配所有向量(相当于重建);若不重算中心,只追加桶内,则聚类会逐渐偏移,可定期重训中心与重建。
面试要点
- 能说明图索引(HNSW)天然支持单点插入;删除多逻辑删除或过滤;更新多为删+插。
- 能说清多图合并:增量小图 + 主图、查询并归、定时或阈值触发合并、合并时插入或重建。
- 能对比 IVF 的增量(追加桶)与图索引的增量(插入/逻辑删),以及合并策略的选择。
记忆要点
- 图索引:插入=逐层找邻居连边;删除=逻辑删或结果过滤;更新=删+插。
- 合并:多子图并行查、结果归并;增量图定期或按阈值合并入主图;合并期可双读。
- IVF 增量=追加桶;删为逻辑删;重算中心则需重建,不重算则长期需重训。