読み取りリペア:読み取りパス中のリペア

読み取りリペア、読み取りパス中のリペアの説明。

読み取りクエリーで、ONEまたはLOCAL_ONEより大きい整合性レベルで不整合な結果が発生すると、DSEは読み取りリペアを開始します。このような読み取りリペアはフォアグラウンドで実行され、リペア・プロセスが完了するまでアプリケーション操作をブロックします。
注: 整合性レベルがONEまたはLOCAL_ONEの読み取りクエリーは、読み取りリペアをトリガーするためにデータの不一致が存在する必要があり、1つのレプリカのみがクエリーされるため、比較は行われず、不一致は発生しないため、アプリケーション操作をブロックしません。
詳しくは以下のようになります。
  1. coordinator nodeは、1つのレプリカにデータを要求し、その他はそれらのデータのダイジェストを要求します。
  2. レプリカからコーディネーターに返されるデータに不一致がある場合は、クエリーに関係するすべてのレプリカから読み取りが要求され(整合性レベルによって決まる)、結果がマージされます。
  3. 1つのレプリカに各カラムの最新データがすべて含まれない場合は、異なるレプリカのカラムを混在させて一致させることで、新しいレコードが組み立てられます。
  4. 最新バージョンを決定した後、レコードは要求に関係するレプリカにのみ書き戻されます。
たとえば、レプリケーション係数が3のLOCAL_QUORUM読み取りの場合、2つのレプリカがクエリーされるため、2つのレプリカのみがリペアされます。
注: 読み取りリペアでは、期限が切れたトゥームストーンに伝播せず、実際にデータをリペアする際に期限が切れたトゥームストーンを考慮することもしません。つまり、gc_grace_secondsの有効期限が切れる前にすべてのレプリカ・ノードに伝播されていないトゥームストーン・データがある場合、そのデータはライブ・データとして引き続き返される可能性があります。

データベースがレプリカ間の不整合をどのように処理するかについては、「読み取り要求はどのように実行されるか」を参照してください。