Question
ClickHouse Cloud にデータを書き込んでいますが、読み取る際には、常に最新かつ完全な情報を確実に取得できる必要があります。
回答
同じノードに接続する
ネイティブプロトコル、または書き込み/読み取りにセッションを使用している場合は、同じレプリカに接続する必要があります。この場合、書き込み先のノードから直接読み取ることになるため、読み取り結果の整合性は常に保たれます。
任意のノードへの接続
常に同じノードに接続していると保証できない場合 (たとえば、HTTPS リクエストがロードバランサーによって別のノードに振り分けられる場合) は、次のいずれかを行えます。
A)
- データを書き込む
- 新しいレプリカに接続する
SYSTEM SYNC REPLICA db.table_name LIGHTWEIGHTを実行する- 最新のデータを読み取る
詳しくは、SYSTEM コマンドのリファレンスを参照してください
または
B) 逐次整合性を使用して、いつでも読み取る
SELECT
...
SETTINGS select_sequential_consistency = 1ClickHouse Cloud と、そのデフォルトの SharedMergeTree テーブルエンジンを使用する場合、insert_quorum_parallel は不要である点に注意してください。SharedMergeTree への insert はすべて、設計上クォーラム insert になります。
SYSTEM SYNC REPLICAS または select_sequential_consistency を使用すると、ClickHouse Keeper への負荷が増加し、サービスの負荷状況によってはパフォーマンスが低下する可能性があります。
推奨される方法は、同じセッションまたはネイティブプロトコル (sticky connection) を使って書き込みと読み取りを行うことです。