データの分散Couchbase Serverの動作について熟知している場合、クラスタ内の異なるノードにまたがってサーバがデータを分散させることを知っていると思います。これは、クラスタ内に4つのノードがある場合、各ノードは平均25%のアクティブデータを含んでいます。Couchbase Serverでビューを使用している場合、インデックスの処理は4つすべてのノードで実行され、4つのノードはディスク上のインデックスからだいたい25%の結果を含んでいます。クラスタ内のデータのサブセットに基づいているため、このインデックスはpartial indexとして参照されています。以下に図示しているこの部分インデックスの中でこれを参照します。
データとインデックスのレプリケートCouchbase Serverはデータレプリケーションも提供します。これはサーバがデータをあるノードからもうひとつのノードへレプリケートすることを意味します。最初のノードが障害の場合、次のノードでそのデータへのリクエストをまだ処理できます。考えられるノード障害を処理するために、Couchbase Serverがレプリケートされたデータの部分インデックスもレプリケートするように指定できます。デフォルトではクラスタ内の各ノードが各デザインドキュメントとビュー関数のコピーを持ちます。ビュー関数を何か変更した場合、Couchbase Serverはクラスタ内のすべてのノードにこの変更をレプリケートします。サーバは単一のデザインドキュメント内のビューからインデックスを生成し、クラスタ内の各ノード上の単一ファイルにインデックスを格納します:
Couchbase Serverはレプリケートされたデータを含むノード上でレプリカインデックスを作成することも任意でできます。これはフェイルオーバのためにクラスタを準備するためです。サーバはもう一つのノードからインデックス情報をレプリケートしませんが、その代わり各ノードで格納されたレプリケートデータのインデックスを生成します。サーバは定義されたデザインドキュメントとビューごとにノード上でレプリケートされたデータのインデックスを再作成します。レプリカインデックスを提供することにより、サーバはノード障害が発生してもまだクエリを実行することができます。Couchbase Serverがレプリカインデックスを作成するかどうかをデータバケット作成時に指定できます。詳細情報については、データバケットの作成と編集を参照してください。
クラスタ内でのクエリ実行時間
ビューに問い合わせて、インデックス処理を開始するとき、クラスタ内の単一ノードへリクエストを送信します。するとこのノードはクラスタ内の他のすべてのノードにリクエストを分散します。送信したクエリのパラメータにより、各ノードはそのノードで現在の大部分のインデックスを送信するか、部分インデックスを更新して送信するかのどちらかを実施します。Couchbase Serverはこれらの部分インデックスを収集し、照合し、集計結果をクライアントに送信します。クエリパラメータを使用したインデックス更新の制御の詳細については、インデックスの更新とstaleパラメータを参照してください。
クエリ実行時のエラーを処理するために、エラーが発生したときにクラスタがどのように動作するかを設定することができます。「エラー制御」を参照してください。
リバランスもしくは障害中のクエリ
クラスタがリバランスしていて、ノードがフェイルオーバ操作をしている間もインデックスを問い合わせることができます。リバランスもしくはノード障害中にクエリを実行する場合、Couchbase Serverはリバランスやノード障害がないかのようにノードから想定通りのクエリ結果を受け取ることを保証します。
ノードがリバランスしている間、データがノード上でアクティブなデータであるかのように、またデータがそのノードから別のノードへ移動していないかのように同じ結果を取得します。別の言い方をすると、この特徴はリバランス中もあるノードから、リバランスが開始される前にノードから受け取るものと矛盾しないクエリ結果を取得できることを保証します。この機能はCouchbase Serverでデフォルトで動作しますが、これを無効化することも任意で選択できます。より詳細な情報は、リバランスでのクエリ結果の一貫性の無効化を参照してください。この機能は、有効であれば、クラスタがより時間のかかるリバランスすることを停止することに注意してください。しかし、テストをすることなしに本番環境でこの機能を無効にすることは推奨しません。無効にすると、一貫性のないクエリ結果を参照することになります。