1. Strong (强一致性)
• 读取行为:任何读取操作(搜索/查询)都会立即反映最新写入的数据,确保获取的是集群中所有节点确认的最新版本。
• 机制:写入操作需同步到所有副本并确认,读取时会等待所有节点达成一致。这可能导致较高延迟。
• 场景:适用于金融交易、实时监控等对数据准确性要求极高的场景。
• 示例:插入数据后立即搜索,结果必然包含该数据,但响应时间较长。
2. Bounded (有界一致性)
• 读取行为:允许在预先定义的时间窗口(如5秒)内读取到旧数据,但超过此窗口后保证全局一致。
• 机制:写入异步复制,读取时可能访问本地副本,若本地数据未同步则返回旧结果。时间窗口结束后强制同步。
• 场景:平衡一致性与性能,适合时效性稍弱的场景(如推荐系统),默认级别。
• 示例:插入数据后1秒内搜索,可能不包含新数据;5秒后搜索则必然包含。
3. Session (会话一致性)
• 读取行为:同一会话(客户端连接)中的写入操作立即可见,其他会话的写入可能延迟。
• 机制:维护会话上下文,确保本会话的写入优先同步,跨会话的数据同步可能异步进行。
• 场景:用户单次操作需实时反馈的场景,如用户上传内容后立即查看。
• 示例:在同一个客户端插入数据后搜索,结果立即可见;其他客户端可能稍后才能看到。
4. Eventually (最终一致性)
• 读取行为:不保证读取顺序或时效性,数据最终一致,但短期内可能返回陈旧结果。
• 机制:完全异步复制,读取最快响应的副本,可能忽略未同步的写入。
• 场景:高吞吐、低延迟且容忍短暂不一致的场景(如日志分析、大数据统计)。
• 示例:插入数据后搜索,可能多次得到不同结果,最终才会稳定。
关键区别对比
维度 | Strong | Bounded | Session | Eventually |
---|---|---|---|---|
数据新鲜度 | 绝对最新 | 时间窗口后最新 | 会话内最新 | 最终最新 |
读取延迟 | 高 | 中等 | 低(会话内) | 最低 |
跨会话可见性 | 立即 | 延迟(时间窗口内) | 仅当前会话 | 延迟较大 |
写入同步方式 | 同步阻塞 | 异步(带时间约束) | 异步(会话优先) | 完全异步 |
适用场景 | 强一致需求 | 平衡一致性与性能 | 会话内实时反馈 | 高吞吐容忍延迟 |
设置建议
• 创建集合时:根据业务需求选择默认级别(如Bounded平衡通用场景)。
• 搜索/查询时:可覆盖默认设置(如临时需要Strong级别确保准确性)。
• 性能权衡:一致性越高,延迟越高,吞吐量越低。根据业务容忍度选择。
通过理解这些差异,可针对性地优化Milvus应用的读取性能和数据准确性。