Consistency Level
本页介绍 Milvus 支持的四种 Consistency Level,以及它们在数据可见性和请求延迟之间的取舍。
Overview
在分布式数据库中,Consistency 描述多个节点或副本在读写操作期间所看到的数据视图。Milvus 支持 Strong、Bounded、Session 和 Eventually 四种 Consistency Level,其中 Bounded 为默认值。执行向量搜索、混合搜索或 Query 时,可以根据业务对数据新鲜度和延迟的要求选择合适的 Consistency Level。
Consistency Levels
根据 PACELC 理论,分布式数据库需要在 Consistency、Availability 和 Latency 之间进行权衡。更强的 Consistency 通常意味着更高的数据新鲜度,同时也可能带来更高延迟。
Strong
Strong 要求读取最新可见数据,是最严格的 Consistency Level。它适合功能测试、金融交易等必须优先保证数据新鲜度的场景,但请求可能需要等待最新写入变为可见。

Bounded
Bounded 允许读取在受控时间窗口内稍旧的数据,在数据新鲜度和请求延迟之间取得平衡。推荐系统等允许短暂数据不可见的场景通常适合使用 Bounded。

Session
Session 保证同一客户端会话能够读取自己已经写入的数据,适合需要 read-your-writes 语义的交互式应用。

Eventually
Eventually 不等待最新写入变为可见,因此延迟最低;如果停止写入,各副本最终会收敛到一致状态。它适合能够容忍短暂数据不可见、但对搜索延迟敏感的场景。

GuaranteeTs
Milvus 使用 GuaranteeTs 控制 Search 或 Query 的数据可见性。QueryNode 只有在能够看到 GuaranteeTs 之前的全部数据后,才会执行请求。不同 Consistency Level 会映射到不同的 GuaranteeTs:
- Strong:使用最新系统时间戳。
- Bounded:使用早于最新系统时间戳的时间点。
- Session:使用当前客户端最近一次写入的时间戳。
- Eventually:使用极小值以跳过一致性等待。
有关实现机制,请参阅 GuaranteeTs 工作原理。