首页/AI/RAG 与向量库速查/Milvus 一致性级别与可见性

Milvus 一致性级别与可见性

Milvus 提供 Strong、Bounded、Eventually、Session 等一致性级别:刚写入的数据在不同级别下可见时间不同;RAG 在线写入场景需要据此决定是否等 flush 或接受延迟可见。

RAG 与向量库速查AI更新于 2026-10-13

一致性级别管什么

Milvus 提供 Strong、Session、Bounded、Eventually 等一致性级别:刚写入的数据在不同级别下的可见时间不同。Session 是默认值,保证本会话能读到自己写入的数据;Strong 读到最新已确认写入但延迟最高;Eventually 延迟最低但可能读到旧数据。RAG 在线更新场景要据此决定是等 flush、提高一致性级别,还是接受短时间的延迟可见。

基本信息

Strong读到最新已确认写入,代价是查询延迟最高
Session保证本会话能读到自己写入的数据,属默认级别
Bounded有界延迟内可见,介于两者之间
Eventually延迟最低,可能读到旧数据

典型使用场景

  • 联调验证:写入后立刻检索失败,先确认是不是可见性延迟
  • 在线增量:新增文档要求秒级可检索时,选择更严的一致性级别
  • 批量导入:导入期用宽松级别换吞吐,导入后再做验证
  • 读写分离:查询侧用宽松级别、写入侧确认成功后回执
  • 故障排查:区分「数据没写进去」与「写了但暂时读不到」

指定一致性级别检索

指定一致性级别检索
res = client.search(
    collection_name="kb", data=[query_vec], limit=10,
    consistency_level="Strong",   # 或 Session / Bounded / Eventually
)
# 在线写入后要立即检索验证的场景,用 Session 或 Strong 更省心
# 批量导入等对延迟敏感的场景,可先用宽松级别再统一校验

级别与适用场景

级别可见性适用
Strong最新已确认写入立即可见写入后立刻要读的校验流程
Session本会话内可读到自己写入的数据在线增量更新的常用选择
Bounded有界延迟内可见对延迟敏感又要求较新数据的检索
Eventually可能读到旧数据批量导入期追求吞吐
批量导入后立即检索验证,常因未 flush 或未达到可见条件而查不到,属预期行为而非故障;验证脚本里加上等待或改用更严级别即可。
一致性级别是查询级参数:同一集合的不同请求可以用不同级别,按业务路径分别设置,比全局统一设成最高级别更划算。

易错点

  • 线上统一用 Strong 换确定性,写入高峰时查询延迟被拉高
  • 把「写完立刻可见」当默认假设,联调时误报数据丢失
  • 批量导入后立刻全量校验,未等待可见就判定导入失败
  • 一致性级别改动未记录,性能波动时找不到原因

数据来源与参考

  • Milvus 官方文档(Consistency Level / Flush)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌