整合性レベルはどのように構成されるか

DataStax Enterpriseの整合性レベルは、可用性とデータ精度との兼ね合いを管理するために構成することができます。

DataStax Enterprise(DSE)の整合性レベルは、可用性とデータ精度との兼ね合いを管理するために構成することができます。セッションまたは個別の読み取りもしくは書き込み操作の単位で整合性を構成します。

cqlsh内で、CONSISTENCYを使用して、現在のcqlshセッションのすべてのクエリーについて整合性レベルを設定します。クライアント・アプリケーションをプログラミングするには、適切なドライバーを使用して整合性レベルを設定します。たとえば、Javaドライバーを使用して、setConsistencyLevelを持つQueryBuilder.insertIntoを呼び出し、挿入ごとの整合性レベルを設定します。

すべての書き込み操作と読み取り操作のデフォルトの整合性レベルはONEです。

書き込みの整合性レベル

以下の表で、書き込みの整合性レベルについて説明します。

1. 書き込みの整合性レベル
レベル 説明 使用法
ALL 書き込みが、対象パーティションに対応する、クラスター内のすべてのレプリカ・ノードのコミット・ログとmemtableに書き込まれる必要があります。 他のレベルと比べて最高の整合性と最低の可用性を提供します。
EACH_QUORUM 書き込みが、datacenterのレプリカ・ノードのクォーラム(過半数)のコミット・ログとmemtableに書き込まれる必要があります。 複数データ・センター・クラスターで、各データ・センターの整合性を同じレベルに厳密に維持するために使用されます。たとえば、データ・センターがダウンしており、そのデータ・センターでQUORUM(過半数)に達しないときに書き込みが失敗するようにしたい場合に、このレベルを選択します。強い整合性。
QUORUM 書き込みが、すべてのデータ・センターのレプリカ・ノードのクォーラム(過半数)のコミット・ログとmemtableに書き込まれる必要があります。 クラスターの強い整合性を維持するために単一または複数データ・センターのクラスターで使用します。一定レベルの失敗を許容できる場合に使用します。
LOCAL_QUORUM 書き込みが、coordinator nodeと同じデータ・センターにあるレプリカ・ノードのクォーラム(過半数)のコミット・ログとmemtableに書き込まれる必要があります。データ・センター間の通信のレイテンシーを避けます。 NetworkTopologyStrategyなどのラック認識レプリカ配置ストラテジ、および適切に構成したスニッチを使用する複数データ・センター・クラスターの単一データ・センター内で、整合性を維持するために使用します。強い整合性。
ONE 書き込みが、少なくとも1つのレプリカ・ノードのコミット・ログとmemtableに書き込まれる必要があります。 整合性の要件が厳しくないため、大半のユーザーのニーズを満たします。
TWO 書き込みが、少なくとも2つのレプリカ・ノードのコミット・ログとmemtableに書き込まれる必要があります。 ONEに似ています。
THREE 書き込みが、少なくとも3つのレプリカ・ノードのコミット・ログとmemtableに書き込まれる必要があります。 TWOに似ています。
LOCAL_ONE ローカル・データ・センターの少なくとも1つのレプリカ・ノードに書き込みを送信し確認応答がある必要があります。 複数のデータ・センター・クラスターに適した、データ・センターを横断するトラフィックのない、整合性レベルONEを実現します。セキュリティと品質上の理由から、オフライン・データ・センターでこの整合性レベルを使用します。オフライン・ノードがダウンした場合、LOCAL_ONEは他のデータ・センターのオンライン・ノードへの自動接続を禁止します。
ANY 書き込みが、少なくとも1つのノードに書き込まれる必要があります。パーティション・キーのすべてのレプリカ・ノードがダウンしていても、ヒンテッド・ハンドオフが書き込まれれば、書き込みを成功と見なすことができます。書き込み時にすべてのレプリカ・ノードがダウンしていた場合は、そのパーティションのレプリカ・ノードが回復するまでANY書き込みは読み取り可能になりません。 低いレイテンシーをもたらし、書き込みが失敗しないことを保証します。整合性が最も低く、可用性が最も高くなります。

読み取りの整合性レベル

以下の表で、読み取りの整合性レベルについて説明します。

2. 読み取りの整合性レベル
レベル 説明 使用法
ALL すべてのレプリカが応答した後に、レコードを返します。1つでもレプリカが応答しないと、読み取り操作は失敗します。 すべてのレベルで最高の整合性、およびすべてのレベルで最低の可用性を提供します。
EACH_QUORUM 読み取りではサポートされていません。
QUORUM すべてのデータ・センターのクォーラム(過半数)のレプリカが応答したら、レコードを返します。 クラスターの強い整合性を維持するために単一または複数データ・センター・クラスターで使用します。一定レベルの失敗を許容できれば、強力な整合性を確保します。
LOCAL_QUORUM coordinator nodeが報告した際に現在のデータ・センター内のクォーラム(過半数)のレプリカが応答したら、レコードを返します。データ・センター間の通信のレイテンシーを避けます。 NetworkTopologyStrategyなどのラック認識レプリカ配置ストラテジ、および適切に構成したスニッチを使用する複数データ・センター・クラスターの単一データ・センター内で、整合性を維持するために使用します。
LOCAL_ONE ローカル・データ・センターの最も近いレプリカからの応答を返します。 複数のデータ・センター・クラスターに適した、データ・センターを横断するトラフィックのない、整合性レベルONEを実現します。セキュリティと品質上の理由から、オフライン・データ・センターでこの整合性レベルを使用します。オフライン・ノードがダウンした場合、LOCAL_ONEは他のデータ・センターのオンライン・ノードへの自動接続を禁止します。
SERIAL 新しい追加や更新を提示することなく、現在の(そしてコミットされていない可能性がある)データの状態を読み取ることができます。SERIALの読み取りにおいて進行中のコミットされていないトランザクションが見つかった場合は、読み取りの一環としてそのトランザクションがコミットされます。QUORUMに似ています。 カラムへの書き込みのためにユーザーが軽量トランザクションを呼び出した後にカラムの最新の値を読み取るために使用します。そうすると、データベースは更新がないか、進行中の軽量トランザクションを確認し、あれば最新のデータを返します。
LOCAL_SERIAL SERIALと同じですが、ローカル・データ・センターに限定されます。LOCAL_QUORUMに似ています。 軽量トランザクションの直列化可能な整合性を実現するために使用されます。
ONE スニッチによって定まる最も近いレプリカから応答を返します。デフォルトでは、他のレプリカとの整合性を維持するために、読み取りリペアがバックグラウンドで実行されます。 古いデータを読み取る確率が比較的高いことを許容できれば、すべてのレベルで最高の可用性を提供します。読み取り先として接続したレプリカが、必ず最新の書き込みを持っているとは限りません。
TWO 最も近い2つのレプリカから最新のデータを返します。 ONEに似ています。
THREE 最も近い3つのレプリカから最新のデータを返します。 TWOに似ています。

QUORUMの計算方法

QUORUMレベルは、クォーラム(過半数)を構成する数のノードに書き込まれます。クォーラムは計算され、以下のように整数になるように切り捨てが行われます。

quorum = (sum_of_replication_factors / 2) + 1

レプリケーション係数の合計値」とは、各データ・センターのreplication_factor設定を足し合わせた合計値です。

sum_of_replication_factors = datacenter1_RF + datacenter2_RF + . . . + datacentern_RF

たとえば、レプリケーション係数3を使用した場合、クォーラムは2ノードになります((3/2)+1 = 2)。このクラスターは、1つのレプリカ・ノードのダウンを許容できます。

例:
  • レプリケーション係数6を使用した場合、クォーラムは4ノードになります((6/2)+1 = 4)。このクラスターは、2つのレプリカのダウンを許容できます。
  • 各データ・センターのレプリケーション係数が3である2つのデータ・センターで構成されるクラスターの場合、クォーラムは4ノードになります((6/2)+1 = 4)。このクラスターは、2つのレプリカのダウンを許容できます。
  • 2つのデータ・センターのレプリケーション係数が3で、3つのデータ・センターのレプリケーション係数が2である5つのデータ・センターで構成されるクラスターの場合、クォーラムは7ノードになります((12/2)+1 = 7)。

データ・センターの数が増えるほど、成功した操作に応答するために必要なレプリカ・ノードの数も増えます。

LOCAL_QUORUMレベルも、QUORUMと同様に、コーディネーター・ノードと同じデータ・センターのレプリケーション係数に基づいて計算されます。クラスターが複数のデータ・センターを持つ場合、クォーラムはローカル・レプリカ・ノードのみを使用して計算されます。

EACH_QUORUMでは、書き込み要求が成功するために、クラスター内のすべてのデータ・センターは、そのデータ・センターのレプリケーション係数に基づいてクォーラム(過半数)に達する必要があります。クラスター内の各データ・センターについて、書き込み要求が成功するために、レプリカ・ノードのクォーラムはコーディネーター・ノードに応答する必要があります。