更新間隔に加えて、バックグラウンドで全てのインデックスを自動的に更新することもできます。秒による更新時間間隔と、ビューエンジンがインデックスを更新する前に発生するドキュメント更新の数の2つのパラメータを使って自動更新を設定します。これらの2つのパラメータはupdateInterval
と、updateMinChanges
です:
updateInterval
:自動再インデックスの時間間隔でミリ秒で指定し、デフォルトは5000ミリ秒です。
updateMinChanges
:再インデックス実行前に発生するドキュメント更新の数で、デフォルトは5000です。
自動更新は開発モード、プロダクションモードのインデックス全体を処理します。自動更新は開発モードの部分的なインデックスを更新しません。
自動更新処理にかかわらず、ディスクに永続化されたドキュメントのみがインデックスの対象となります。ドキュメントがディスクに永続化されていない場合でも、自動更新処理はそれらのドキュメントのディスク書き込みを実行しません。observe
コマンドを利用してドキュメントがディスクに永続化されたか、そしてインデックスに更新されたかを監視することができます。
更新は、次のように適用されます:
アクティブなインデックス(プロダクションビュー)
全てのアクティブなインデックス(プロダクションビュー)は、更新間隔(updateInterval
)と変更ドキュメント数(updateMinChanges
)に従って自動的に更新されます。
updateMinChanges
が、0(ゼロ)に設定されている場合、メインインデックスの自動更新は無効になります。
レプリカのインデックス
レプリカのインデックスがバケットで構成されている場合、そのインデックスはreplicaUpdateMinChanges
; デフォルト5000)のドキュメント変更設定に応じて自動的に更新されます。
replicaUpdateMinChanges
が、0(ゼロ)に設定されている場合、レプリカインデックスの自動更新は無効になります。
グローバルにも、個々のデザインドキュメント内の全てのインデックスにも、REST APIを利用して自動更新発動のレベルを指定できます。
現在のビュー更新デーモンの設定を取得するには、クラスタ内のノードの管理用ポートに次のURLでアクセスします。http://nodename:8091/settings/viewUpdateDaemon
:
GET http://Administrator:Password@nodename:8091/settings/viewUpdateDaemon
現在の更新設定のJSONが返却されます:
{ "updateInterval":5000, "updateMinChanges":5000, "replicaUpdateMinChanges":5000 }
設定を更新するためには、更新した値を含むペイロードデータをPOST
します。例えば、更新の間隔を10秒に、変更ドキュメント数を7000にします:
POST http://nodename:8091/settings/viewUpdateDaemon updateInterval=10000&updateMinChanges=7000
成功すると、更新された設定がJSONで返却されます。
個々のデザインドキュメントに対して設定を行うには、デザインドキュメントのoptions
セクションでパラメータを指定します。例:
{ "_id": "_design/myddoc", "views": { "view1": { "map": "function(doc, meta) { if (doc.value) { emit(doc.value, meta.id);} }" } }, "options": { "updateMinChanges": 1000, "replicaUpdateMinChanges": 20000 } }
この情報はデザインドキュメント作成時、あるいは更新時にデザインドキュメントREST APIにより設定できます。詳細については、「デザインドキュメントのREST API」を参照してください。
curlツールを使用してこの操作を実行するには:
shell> curl -X POST -v -d 'updateInterval=7000&updateMinChanges=7000' \ 'http://Administrator:Password@192.168.0.72:8091/settings/viewUpdateDaemon'
部分的な開発モードのビューは自動的に再構築されません。また、一貫したビューであっても、自動更新メカニズムに依存しているので、リバランス処理中は開発モードのビューは更新されません。このように開発モードのビューを更新するとシステムリソースが無駄になるからです。