问题
我正在将数据写入 ClickHouse 云,并且需要能够在读取数据时保证获取最新的完整信息。
答案
连接到同一节点
如果您使用的是本地协议或会话来进行写入/读取操作,则应该连接到同一副本:在这种情况下,您正在直接从写入的节点读取,因此您的读取始终是一致的。
连接到随机节点
如果您无法保证连接到同一节点(例如,通过 HTTPS 调用连接到节点,这些调用通过负载均衡器进行随机分配),您可以执行以下操作之一:
A)
- 写入您的数据
- 连接到新的副本
- 运行
SYSTEM SYNC REPLICA db.table_name LIGHTWEIGHT
- 读取最新的数据
请参阅 SYSTEM
命令 参考
或
B) 随时使用顺序一致性进行读取
SELECT
...
SETTINGS select_sequential_consistency = 1
请注意,使用 ClickHouse 云及其默认的 SharedMergeTree 引擎时,无需使用 insert_quorum_parallel(这是默认设置)。
使用 SYSTEM SYNC REPLICAS 或 select_sequential_consistency 会增加 ClickHouse Keeper 的负载,并可能降低性能,具体取决于服务的负载。
建议的方法是使用相同会话或本地协议(粘性连接)进行写入/读取操作。