はじめに
本記事では、Couchbase Serverの各種サービスの中から、Indexサービス(Index Service)について解説します。
以下は、Indexサービスを構成するプロセスと他のサービスとの関連を図示しています。
Indexサービスの構成要素
プロセス
Indexサービスは、以下の3つのプロセスからなります。
- スーパーバイザー
- プロジェクター
- ルーター
スーパーバイザー
スーパーバイザーはIndexサービスのメインプログラムです。Indexサービスノードで稼働し、以下の役割を持ちます。
- インデックス定義の管理
- インデックス作成・保存
- インデックス更新
- Queryサービスからのリクエストへの対応
プロジェクターとルーター
プロジェクターとルーターはDataサービス・ノード上で実行されるプロセスです。
スーパーバイザーによって提供されるインデックス定義に従って、Indexサービスにデータを提供します。
インデックスが作成されていない場合、プロジェクターとルーターは何もしません。
プロセス間および他サービスとの連携
インデックス作成時
Queryサービスから、スーパーバイザーに対して、インデックス作成リクエストが送られます。
インデックスの初回作成時、スーパーバイザーがインデックス定義をプロジェクターとルーターに渡します。
データ更新時
プロジェクターとルーターは、Dataサービスによって提供されるDCPストリームを継続的に監視します。DCPストリーム上のデータミューテーション(更新)情報が、インデックスフィールドへのミューテーションを含む場合には、プロジェクターとルーターは、そのデータをスーパーバイザーに送信して、スーパーバイザーがインデックスを更新します。
インデックス利用時
Queryサービスから、スーパーバイザーに対して、リクエストが送られ、スーパーバイザーがQueryサービスへインデックス情報を返します。
ストレージ
Indexサービスは、標準ストレージまたはメモリ最適化ストレージのいずれかを使用するように構成できます。
標準ストレージ
個々のインデックスに加えられたすべての変更をディスクに保持します。各インデックスは専用のファイルからなります。
- Community Editionでは、インデックス作成時に、追加書き込み専用(append-only)モード、あるいは循環再利用(circular-reuse)モードの何かを選択できます。
- Enterprise Editionでは、自動的に圧縮処理されます。
メモリ最適化ストレージ
EnterpriseEditionでのみ使用できます。インデックスはメモリに保存されます。これにより、メンテナンス、スキャン、および変更の効率が向上します。インデックスのスナップショットはディスク上に保持され、ノード障害が発生した場合に迅速に回復できるようにします。メモリ最適化ストレージには、メモリ消費の最適化のため、skiplist(Bツリー)構造が使用されています。
最後に
本記事の内容が、Couchbase Server管理者の方だけでなく、JSONデータベースを検討されている方にも、活用いただけるようであれば幸いです。
一つの記事で、全体を敷衍することは不可能ですが、適宜、下記の関連情報を参考としていただきますよう、お願いします。
関連情報
NoSQL/JSONデータベースCouchbase理解・活用へのロードマップ