如何在 ClickHouse 中实现数据读取一致性?
·2 分钟阅读
了解如何确保从 ClickHouse 读取数据时的数据一致性,无论您是连接到同一节点还是随机节点。
问题
我正在将数据写入 ClickHouse Cloud,并且需要能够在读取数据时保证我获得最新的完整信息。
答案
与同一节点对话
如果您使用原生协议或会话来执行写入/读取操作,那么您应该连接到同一副本:在这种情况下,您直接从您正在写入的节点读取,那么您的读取将始终是一致的。
与随机节点对话
如果您不能保证您正在与同一节点对话(例如,通过 HTTPS 调用与节点对话,这些调用通过负载均衡器进行混洗),您可以选择
A)
- 写入您的数据
- 连接到新的副本
- 运行
SYSTEM SYNC REPLICA db.table_name LIGHTWEIGHT
- 读取最新数据
请参阅 SYSTEM
命令 参考文档
或
B) 随时使用顺序一致性读取
SELECT
...
SETTINGS select_sequential_consistency = 1
请注意,当使用 ClickHouse Cloud 及其默认的 SharedMergeTree 引擎时,不需要使用 insert_quorum_parallel(这是给定的)
使用 SYSTEM SYNC REPLICAS 或 select_sequential_consistency 将增加 ClickHouse Keeper 的负载,并且根据服务的负载,可能会降低性能。
推荐的方法是使用同一会话或原生协议(粘性连接)进行写入/读取。