Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ClickHouseでデータ読み取り整合性を保つには?

Question

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 への insert はすべて、設計上クォーラム insert になります。

SYSTEM SYNC REPLICAS または select_sequential_consistency を使用すると、ClickHouse Keeper への負荷が増加し、サービスの負荷状況によってはパフォーマンスが低下する可能性があります。

推奨される方法は、同じセッションまたはネイティブプロトコル (sticky connection) を使って書き込みと読み取りを行うことです。

Navigation