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