一致性级别管什么
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 或未达到可见条件而查不到,属预期行为而非故障;验证脚本里加上等待或改用更严级别即可。
一致性级别是查询级参数:同一集合的不同请求可以用不同级别,按业务路径分别设置,比全局统一设成最高级别更划算。