Couchbaseのビューは次のように動作します
ドキュメントがディスクに永続化されたときに、ビューが更新されます。ドキュメントを作成、または更新してからドキュメントがビューに反映されるまでには遅延があります。
有効期限付きドキュメントは、バックグラウンドの有効期限チェックプロセスがデータベースからドキュメントを削除するまで自動的には削除されません。期限切れの文書がインデックス内に存在し得るということです。
ビューのスコープは単一バケット内の一部である、単一のデザインドキュメント内となります。ビューは対応するバケット内の情報にのみアクセスできます。
ビュー名は、1つまたは複数のUTF-8文字を使用して指定する必要があります。空白のビュー名は使用できません。ビュー名は先頭と末尾に空白文字(スペース、タブ、改行、キャリッジリターン)を設定できません。
UTF-8でエンコードできないドキュメントIDは自動的にフィルタリングされ、いかなるビューにも含まれません。フィルタリングされたドキュメントは特定できるようにログに記録されます。
ビューは対応するバケット内に保存されたドキュメントにのみアクセスできます。ビューでは複数のバケットのデータへアクセスしたり、集計したりすることはできません。
ビューはデザインドキュメントの一部として作成され、デザインドキュメントは対応するバケット内に存在しています。
各デザインドキュメントは0からn個のビューを持つことができます。
各バケットには0からn個のデザインドキュメントを作成できます。
あるビューの更新が発動すると同一のデザインドキュメント内の全てのビューが更新されます。例えば、3つのビューを含むデザインドキュメントは、そのうちの1つのビューが更新されると、3つ全てのビューを同時に更新します。
更新は2つの方法で起動できます
stale
パラメータを使用することによるアクセスもしくは問い合わせの時点。 (「インデックス更新とstale
パラメータ」を参照してください。)
更新されたドキュメントの数、または最後の更新からの時間に応じてCouchbase Serverが自動的に更新。
自動更新は全体的にも、個々のデザインドキュメント単位でも制御することができます。「インデックスの自動更新」を参照してください。
ビューは差分更新されます。ビューが初めてアクセスされたとき、バケット内の全てのドキュメントがmap/reduce関数によって処理されます。その後の各アクセスでは、最後にビューインデックスが更新されてから追加、更新、削除されたドキュメントのみを処理します。
これはビューが本質的に完全な増分であることを意味します。変更されたドキュメントのみを更新するので、ビューへの更新は高速です。組み込みの自動更新システムか、あるいはクライアントからの要求か、アプリケーションフレームワークからの明示的な更新によって、ビューが更新されたか確認してください。
ビューの差分更新処理の性質上、情報はディスクに保存されたインデックスに追記されるだけです。これは、インデックスを効率的に更新するのに役立ちます。コンパクション(自動コンパクションを含む)はディスク上のインデックスサイズを最適化し、インデックスの構造を最適化します。最適化されたインデックスはより効率的に更新、クエリが可能です。「データベースとビューのコンパクション」を参照してください。
ビュー定義を変更すると、ビュー全体が再作成されます。これはライブデータに悪影響を及ぼすことがあるので、開発モードのビューだけが変更可能になっています。
ビューはデザインドキュメントによって編成され、インデックスはデザインドキュメントに基づいて作成されます。複数のビューをもつデザインドキュメント内のひとつのビューを変更すると、同一デザインドキュメント内の全てのビュー(と保存されたインデックス)が無効化され、そのデザインドキュメント内に定義されている関連するビューは再構築が必要になります。これはアクティブなプロダクションのビューが必要とするI/Oに加えて、インデックスの再構築中にクラスタにわたりI/Oを増加させます。
問い合わせをする前か後にビューの結果セットの更新を選択できます。もしくは、ビューへ問い合わせるとき、ビューに存在する結果セットの取得を選択できます。この場合、結果は古い可能性があります。より詳しい情報は、「インデックス更新とstale
パラメータ」を参照してください。
ビューエンジンは各デザインドキュメントのインデックスを作成します。このインデックスはデザインドキュメント内のすべてのビューの結果を含んでいます。
ディスクに保存されたインデックス情報はビュー内で定義されたキーと値の組み合わせで構成されています。キーと値のデータはインデックス内に保存され、可能な限り高速に返却されます、そしてreduce関数を含むビューはreduceした情報をインデックスのデータから抽出して返却します。
map関数で定義したキーと値の情報はインデックスに保存されているので、出力したキーと値の情報が元となるドキュメントデータより大きくなると、インデックス全体のサイズは保存データより大きくなることがあります。