書き込み要求はどのように実行されるか
書き込み整合性レベルは、書き込みが成功したと見なされるために、成功確認を応答する必要があるレプリカ・ノードの数を定めます
コーディネーター・ノードは、書き込まれる行を所有するすべてのレプリカに書き込み要求を送信します。すべてのレプリカ・ノードは、稼働していて使用可能であれば、クライアントによって指定された整合性レベルに関係なく、書き込み要求を受け取ります。書き込み整合性レベルは、書き込みが成功したと見なされるために、成功確認を応答する必要があるレプリカ・ノードの数を定めます。成功とは、コミット・ログとmemtableにデータが書き込まれたことを意味します。
コーディネーター・ノードはその行のレプリカに書き込みを転送します。コーディネーター・ノードが整合性レベルで指定されたノード数から書き込み確認を受け取った後、コーディネーターがクライアントに応答します。
- コーディネーターは、要求された整合性レベルを満たすのに十分な数のレプリカに書き込めない場合は、
Unavailable
例外をスローし、書き込みを実行しません。 - レプリカは十分にあるが、時間枠内に必要な書き込みが完了しない場合、コーディネーターは
Timeout
例外をスローします。
たとえば、単一データ・センターに、レプリケーション係数が3の10ノードのクラスターがある場合、受信した書き込みは、要求された行を所有する3つのノードすべてに送信されます。クライアントによって指定された書き込み整合性レベルがONE
である場合、書き込みを完了した最初のノードがコーディネーターに応答を返すと、コーディネーターが代理で成功メッセージをクライアントに返します。整合性レベルがONE
であるということは、3つのレプリカのうちの2つが、要求が行われたときにダウンしていた場合、この書き込みを取りこぼす可能性があるということです。レプリカが書き込みを取りこぼした場合、行は、いずれかの組み込みリペア機能(ヒンテッド・ハンドオフ、読み取りリペア、またはアンチエントロピー・ノード・リペア)を使用して、整合が取れていることを後で確認します。