五厂面经真题集小米面经高频知识库更新索引一致性版本化索引速答 · 约 5 分钟更新 2026-09-29

知识库更新期间,用户查到新旧混杂的数据怎么办?

一句话结论

知识库更新时不要先删旧索引再建新索引;让新旧版本并存,准备好后用别名原子切换,或双写后灰度切流,避免用户读到新旧混杂的数据。

先这样答

知识库更新期间,我会用版本化索引处理一致性。新索引构建完成前,旧索引继续提供查询。新索引准备好后,再让查询从旧版本切到新版本。

比较稳妥的做法是让新旧索引并存。系统先完整准备新索引,再通过别名切换让版本原子生效。切换前,查询仍然指向旧索引。切换后,查询统一指向新索引。这样不会出现一部分请求读旧索引、另一部分请求读新索引的混杂状态。

如果业务需要持续接收更新,也可以采用双写加灰度切流。更新内容同时写入新旧索引,再逐步把查询流量切到新索引。面试中我不会只回答先删旧索引、再创建新索引。这个方案没有说明切换期间如何保证一致性,继续追问时就很难回答。

面试官会怎么追问

  • 「为什么不能先删掉旧索引,再创建新索引?」 先删后建会产生索引空档。更新期间,查询可能没有稳定的数据来源。这个做法也没有解决新旧数据混在一起的问题。

  • 「别名切换具体解决了什么?」 别名让查询使用一个统一入口。新旧索引可以同时存在,准备完成后再切换指向。切换原子生效,查询不会在两个版本之间随机选择。

  • 「新索引构建期间还要继续接收数据,怎么处理?」 可以采用双写方案,让更新内容同时写入新旧索引。新索引准备好后,再通过灰度切流逐步使用新索引。这样可以覆盖构建期间持续发生的更新。

回答的坑

只说先删旧索引、再创建新索引,没有回答切换期间的一致性问题。

只说新旧索引并存,却没有说明用别名原子切换或双写灰度切流。

—— 本题完 ——