CONSISTENCY

コーディネーター・ノードがCQLシェル・セッション中に非軽量トランザクションを適切に処理するにはレプリカ内のいくつのノードが応答する必要があるかを決定します。

整合性レベルは、コーディネーター・ノードが非軽量トランザクションを適切に処理するために応答する必要があるレプリカ内のノードの数を決定します。

制約事項: CQLシェルは、整合性レベルがSERIALまたはLOCAL_SERIALに設定されている場合、読み取り要求(SELECT文)のみをサポートします。詳細については、「データ整合性」を参照してください。LWTのレベルを設定し、SERIAL CONSISTENCYを使用して、IF EXISTSまたはIF NOT EXISTSを含む要求を作成します。

構文

CONSISTENCY [level]
表 1. 凡例
構文規則 説明
大文字 リテラル・キーワード。
小文字 リテラル以外。
イタリック体 変数値。ユーザー定義値と置き換えます。
[] 任意。角かっこ( [] )で任意指定のコマンド引数を囲みます。角かっこは入力しないでください。
( ) グループ。丸かっこ(( ))は、選択肢を含むグループを示します。丸かっこは入力しないでください。
| または。縦棒( | )で代替要素を区切ります。要素のいずれかを入力してください。縦棒は入力しないでください。
... 繰り返し可能。省略記号(...)は、構文要素を必要な回数だけ繰り返すことができることを示します。
'Literal string' 単一引用符( ' )でCQL文内のリテラル文字を囲みます。大文字を維持するには、単一引用符を使用します。
{ key : value } マップ・コレクション。中かっこ( { } )でマップ・コレクションまたはキーと値のペアを囲みます。コロンでキーと値を区切ります。
<datatype1,datatype2> セット、リスト、マップ、またはタプル。山かっこ(< >)で、セット、リスト、マップまたはタプル内のデータ型を囲みます。データ型はコンマで区切ります。
cql_statement; CQL文の終了。セミコロン( ; )ですべてのCQL文を終了します。
[--] コマンドライン・オプションとコマンド引数は、2つのハイフン(--)で区切ります。この構文は、引数がコマンドライン・オプションと間違われる可能性がある場合に役立ちます。
' <schema> ...</schema> ' 検索CQLのみ:単一引用符( ' )でXMLスキーマ宣言全体を囲みます。
@xml_entity='xml_entity_type' 検索CQLのみ:スキーマ・ファイルおよびsolrConfigファイル内のXML要素を上書きするための実体とリテラル値を示します。

現在のレベルの表示

現在の整合性レベルを表示するには、オプションなしでCONSISTENCYを使用します。
CONSISTENCY
Current consistency level is ONE.

デフォルトのCQLシェル・レベルはONEです。

レベルの設定

レベルはCQLシェル・セッション中のトランザクションのデータ可用性とデータ精度との兼ね合いを決定します。また一部の設定が、ALLやSERIALなど、クラスター内で発生している他のトランザクションに大きな影響を及ぼす場合もあります。CQLシェル設定は、整合性レベルのグローバル設定を上書きします。

重要: この設定を変更する前に、データベースがデータの読み取りと書き込みを行う方法データ・レプリケーションクォーラムの計算方法、およびパーティション・キーについて理解しておくことが重要です。

トランザクションをCQLシェルから開始するとき、コーディネーター・ノードは通常、cqlshを起動したノードになります。リモート・ホストに接続した場合は、リモート・ノードがコーディネーターになります。

表 2. 読み取りの整合性レベル
レベル レプリカ 整合性 可用性
ALL すべて 最高 最低
EACH_QUORUM データ・センター内のクォーラム。

読み取りはサポートされていません。

データ・センター間で統一
QUORUM すべてのデータ・センターの全ノードのクォーラム。一定レベルの障害。
LOCAL_QUORUM コーディネーターと同じデータ・センター内のレプリカのクォーラム。データ・センター間の通信のレイテンシーを避けます。 マルチ・データ・センターで低
ONE スニッチにより決定される最も近いレプリカ。整合性の要件が厳しくないため、大半のユーザーのニーズを満たします。 最低(READ) 最高(READ)
TWO スニッチにより決定される最も近い2つのレプリカ。
THREE スニッチにより決定される最も近い3つのレプリカ。
LOCAL_ONE ローカル・データ・センターの最も近いレプリカからの応答を返します。セキュリティと品質を確保するために、オフライン・データ・センターで使用して、他のデータ・センター内のオンライン・ノードに自動的に接続されるのを防ぐことができます。
ANY スニッチにより決定される最も近いレプリカ。

すべてのレプリカ・ノードが停止している場合、ヒンテッド・ハンドオフの後で書き込みが成功します。低レイテンシーを実現し、書き込みが失敗しないことを保証します。

最低(WRITE) 最高(WRITE)
SERIAL 進行中のLWT(コミットされていない)を含む最新データの結果を返します。進行中のLWTを読み取りの一部としてコミットします。

書き込みはサポートされていません。

LOCAL_SERIAL SERIALと同じですが、データ・センターに限定されます。

書き込みはサポートされていません。

制約事項: SERIALおよびLOCAL_SERIAL設定は読み取りトランザクションをサポートしています。

CONSISTENCYを設定して過半数のノードが応答するように強制します。

CONSISTENCY QUORUM

LWT読み取り要求に対してレベルをSERIALに設定します。

CONSISTENCY SERIAL
Consistency level set to SERIAL.
すべての受賞者をリストします。
SELECT * FROM cycling.race_winners ;
結果が表示されます。この例ではexpand ONを使用しています。
@ Row 1
---------------+--------------------------------------------------
 race_name     | National Championships South Africa WJ-ITT (CN)
 race_position | 1
 cyclist_name  | {firstname: 'Frances', lastname: 'DU TOUT'}

@ Row 2
---------------+--------------------------------------------------
 race_name     | National Championships South Africa WJ-ITT (CN)
 race_position | 2
 cyclist_name  | {firstname: 'Lynette', lastname: 'BENSON'}

@ Row 3
---------------+--------------------------------------------------
 race_name     | National Championships South Africa WJ-ITT (CN)
 race_position | 3
 cyclist_name  | {firstname: 'Anja', lastname: 'GERBER'}

@ Row 4
---------------+--------------------------------------------------
 race_name     | National Championships South Africa WJ-ITT (CN)
 race_position | 4
 cyclist_name  | {firstname: 'Ame', lastname: 'VENTER'}

@ Row 5
---------------+--------------------------------------------------
 race_name     | National Championships South Africa WJ-ITT (CN)
 race_position | 5
 cyclist_name  | {firstname: 'Danielle', lastname: 'VAN NIEKERK'}

(5 rows)
注: 上のクエリー形式では、読みやすくするためにexpand ONを使用しています。

CONSISTENCY SERIALでの挿入に失敗します。

INSERT INTO cycling.race_winners (
   race_name , 
   race_position ,
   cyclist_name 
  ) 
  VALUES (
       'National Championships South Africa WJ-ITT (CN)' ,
        7 ,
        { firstname: 'Joe' , lastname: 'Anderson' } 
      ) 
IF NOT EXISTS ;
InvalidRequest: Error from server: code=2200 [Invalid query] message="LOCAL_SERIAL is not supported as conditional update commit consistency. Use ANY if you mean "make sure it is accepted but I don't care how many replicas commit it for non-SERIAL reads""

CONSISTENCY SERIALでの更新も失敗します。

UPDATE cycling.race_winners SET 
    cyclist_name = { firstname: 'JOHN' , lastname: 'DOE' } 
WHERE 
   race_name='National Championships South Africa WJ-ITT (CN)' 
   AND race_position = 6 
IF EXISTS ;
InvalidRequest: Error from server: code=2200 [Invalid query] message="LOCAL_SERIAL is not supported as conditional update commit consistency. Use ANY if you mean "make sure it is accepted but I don't care how many replicas commit it for non-SERIAL reads""