CONSISTENCY

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

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

CQLシェルは、整合性レベルがSERIALまたはLOCAL_SERIALに設定されている場合、読み取り要求(SELECT文)のみをサポートします。詳細については、ドキュメントの「Data consistency」を参照してください。

ヒント: 軽量トランザクション(LWT)の整合性レベルを設定するには、SERIAL CONSISTENCYコマンドを使用します。LWTを使用する場合は、CONSISTENCYとSERIAL CONSISTENCYレベルの両方が設定されている必要があります。CONSISTENCYをSERIALまたはLOCAL_SERIALに設定することはできません。これらを設定できるのはSERIAL CONSISTENCYだけです。

構文

CONSISTENCY [ 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_level

整合性レベル。有効なレベルの一覧とその説明については、該当するドキュメントを参照してください。詳しく説明されています。

現在の整合性レベルの表示

現在の整合性レベルを表示するには、CONSISTENCYコマンドをオプションなしで使用してください。

CONSISTENCY

Current consistency level is ONE.

デフォルトの整合性レベルはONEです。

整合性レベルの設定

整合性レベルによって、CQLシェル・セッション時のトランザクションのデータ可用性とデータの精度が決まります。設定によっては、ALLやSERIALなど、クラスター内で発生するその他のトランザクションに大きな影響を与える可能性があります。CQLシェル設定は、整合性レベルのグローバル設定をオーバーライドします。

重要: この設定を変更する前に、ドキュメントに記載されているトピック、つまり「データベースはどのようにデータを読み取り、書き込むか」、「データのレプリケーション」、「QUORUMの計算方法」、およびパーティション・キーについて理解することが重要です。このリンクに関するドキュメントを参照してください。

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

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

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

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

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

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

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

制約事項: SERIALおよびLOCAL_SERIAL整合性レベルは読み取りトランザクションをサポートしています。これらのレベルでは書き込みがサポートされていないためエラーが生成されます。本セクションの最後に記載されているINSERTおよびUPDATEの例を参照してください。可能な場合は、ANY整合性レベルを使用します。

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

CONSISTENCY QUORUM

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

CONSISTENCY SERIAL
Consistency level set to SERIAL.
サイクリング・レースのすべての受賞者を返すクエリー。
SELECT *
FROM cycling.race_winners;
クエリーの結果は次のようになります。
@ 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を使用しています。

LWTは、IF EXISTSまたはIF NOT EXISTS文を含む書き込み要求です。LWTの整合性レベルを設定するには、「SERIAL CONSISTENCY」を参照してください。LWTを使用する場合は、CONSISTENCYとSERIAL CONSISTENCYレベルの両方が設定されている必要があります。CONSISTENCYをSERIALまたはLOCAL_SERIALに設定することはできません。これらを設定できるのはSERIAL CONSISTENCYだけです。

次の例は、LWTの障害シナリオを示しています。CONSISTENCY SERIALでのLWTの挿入に失敗します。

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="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でのLWTの更新も失敗します。

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="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""

IF句を省略すると、エラーが生成されます。また、CONSISTENCY LOCAL_SERIALを使用すると、その整合性レベルが無効な要求になるため、エラーが生成されます。