跳至主要内容

如何在 ClickHouse 中实现数据读取一致性?

了解如何确保从 ClickHouse 读取数据时的一致性,无论您连接到同一个节点还是随机节点。

问题

我正在向 ClickHouse Cloud 中写入数据,需要能够在读取数据时保证获取到最新的完整信息。

答案

与同一个节点通信

如果您使用的是原生协议,或者使用会话进行写入/读取,那么您应该连接到同一个副本:在这种情况下,您直接从写入数据的节点读取,因此您的读取将始终保持一致。

与随机节点通信

如果您无法保证与同一个节点通信(例如,通过 HTTPS 调用与节点通信,这些调用通过负载均衡器进行轮换),您可以选择

A)

  1. 写入您的数据
  2. 连接到新的副本
  3. 运行 SYSTEM SYNC REPLICA db.table_name LIGHTWEIGHT
  4. 读取最新的数据

请参阅 SYSTEM 命令 参考

或者

B) 随时使用顺序一致性读取

SELECT 
...
SETTINGS select_sequential_consistency = 1

请注意,在使用 ClickHouse Cloud 及其默认的 SharedMergeTree 表引擎时,使用 insert_quorum_parallel 不是必需的——所有插入到 SharedMergeTree 的操作都是法定数量插入(按设计)。

使用 SYSTEM SYNC REPLICASselect_sequential_consistency 会增加 ClickHouse Keeper 的负载,并且根据服务的负载情况,性能可能会变慢。

推荐的方法是使用相同的会话或原生协议(粘性连接)进行写入/读取。

·2 分钟阅读
    © . This site is unofficial and not affiliated with ClickHouse, Inc.