クエリー結果の不整合の取り扱い

クエリー結果の不整合を処理するためのトラブルシューティングのヒント。

dse.yaml

dse.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/dse.yaml
tarボール・インストール installation_location/resources/dse/conf/dse.yaml

DataStax Enterpriseヘルプ・センターでは、トラブルシューティング情報も提供しています。

クエリー結果の不整合をトラブルシューティングするには、セッション維持、サブ範囲ノード・リペアの修復範囲のサブレンジを検討し、異なるレプリカ・ノードのソフト・コミット・ポイントに関するベスト・プラクティスに従います。

DSE Searchは、効率的で非常に有効に利用できる分散検索アルゴリズムをデータベースの最上部に実装してあります。このアルゴリズムは、すべてのトークン範囲を網羅するために最小限必要なレプリカ・ノードを選択し、ホット・スポットを回避しようとします。したがって、データベースの整合性がとれるのは最終段階になってからという性質のため、一部のレプリカ・ノードはまだ最新の更新を受け取っていないか、インデックスが作成されていない場合があります。この状況により、DSE Searchは、異なるレプリカ・ノードを選択するためクエリー間で整合性のない結果(異なるnumFoundカウント)を返す原因となる場合があります。このような動作は、非常に有効に利用できる分散システム自体の仕組みに起因し、Werner Vogels氏によるACM記事「Eventually Consistent」に詳しく述べられています。通常、結果整合性に問題はなく、DSE Searchは「セッション維持機能」を適用して、後続のクエリーが、正常に安定して稼働しているクラスター上の同じノード・セットをヒットするようにするので、同じ結果が得られます。セッション維持機能は、以下のパラメーターを要求する「セッション・シード」を追加することによって機能します。

shard.shuffling.strategy=SEED
shard.shuffling.seed=session_id

障害やネットワーク・パーティションのため更新されていない不安定なクラスターがある場合は、DSE OpsCenter リペア・サービスを使用してノードをリペアすることによって整合性のある結果が得られます。

結局、異なるレプリカ・ノードでの異なるソフト・コミット・ポイントが、不整合性が発生する他の小さな要因となります。指定された項目のインデックスが作成され、指定されたノードでコミットされても、まだそのノードのレプリカ上では何も行われていない可能性があります。この状況は、主に各ノードの負荷の関数です。以下のベスト・プラクティスを実行してください。

  • ノード間で読み取り/書き込み負荷のバランスを均一にすること
  • ソフト・コミット時間と、非同期インデックス作成同時実行を適切に調整すること
  • バック・プレッシャーを dse.yaml ファイルで設定すること

バック・プレッシャー・メカニズムを使用するマルチスレッド非同期インデックス作成については、「インデックス作成パフォーマンスの構成と調整」を参照してください。

挿入のスループットを最大化するために、DSE Searchはデータベースからの挿入要求をバッファリングして、アプリケーションの挿入要求にできるだけ早く確認応答できるようにします。ただし、バッファに蓄積される要求が多すぎる場合(構成可能な設定)、DSE Searchは、DSE Searchがバッファリングされた要求に追いつくまで着信要求を一時停止またはブロックします。極端な場合、その一時停止により、アプリケーション側でタイムアウトが発生します。