1

ビューが要求されたときに「マップ」が最後に要求されてから追加されたドキュメントにのみ実行されることをどこかで読んだと思いますか?これはどのように決定されますか?シーケンス番号について何か見たと思いました。これはあなたが得ることができるものですか?_revフィールドの末尾にあるUUIDの一部ではありませんか?

ビュー全体(すべてのレコードにわたって)の「再計算」を強制する方法はありますか?

4

1 に答える 1

1

技術概要のビュー インデックスに関するセクションは、これに関する優れたガイドです。

ビュー ビルダーは、データベース シーケンス ID を使用して、ビュー グループがデータベースに対して完全に最新かどうかを判断します。そうでない場合、ビュー エンジンは、最後の更新以降に変更されたすべてのデータベース ドキュメントを (パックされた順番で) 調べます。ドキュメントはディスク ファイル内で発生した順序で読み取られるため、ディスク ヘッド シークの頻度とコストが削減されます。
ドキュメントが検査されると、以前の行の値がビュー インデックスから削除されます (存在する場合)。ドキュメントがビュー関数によって選択されている場合、関数の結果が新しい行としてビューに挿入されます。

CouchDB はまず、シーケンス ID (データベース内のドキュメントに変更があるたびに更新されます) を使用して、データベース全体で何かが変更されたかどうかを確認します。何かが変更された場合、それらのドキュメントを探しに行き、マップ機能を実行します。

ドキュメントを変更するとビューが徐々に更新されるため、ビューを再構築/再生成する必要はありません (使用するまでビューは更新されないことに注意してください)。1 つの方法 (そして、もっと良い方法があると確信しています) は、ビューを記述したデザイン ドキュメントを削除し、デザイン ドキュメントが通常のドキュメントと (ほとんど) 変わらないことを確認して、再度挿入することです。

于 2009-12-03T18:40:03.713 に答える