2011-01-19 20 views
3

変更APIは実際に何をしますか?それは各文書+削除された文書の最後のリビジョンをリストしていますか?couchdb変更通知

またはそれをこのように置く:

のCouchDBの変更通知機能は、クエリに一致するすべてのドキュメントを一覧表示するために使用することができますか?例えば

、私はフィルタ機能を持っている場合:

search = function(doc,req) 
{ 
    return (doc.min && doc.max && doc.min < req.query.q && doc.max > req.query.q) 
} 

私は< doc.maxここ< someValueのdoc.min一致するすべての文書を得るのだろうか?

http:// server/database/_changes? filter = doctype/search & q = somevalue

私のテストデータベースでは、そうだと思われますが、大きなデータベースがあるとどうなりますか?

答えて

11

データベースに書き込むたびに、seqnumという名前が付けられます。 (またはシーケンス番号)これらの書き込みのログは、書き込みに関する他の情報の中で、_id,_revという文書とともに格納されます。新しく作成された文書は次のseqnum(古いseqnum + 1)を取得します。一方、文書の更新では、新しいseqnumが追加されますが、ログから古い文書も削除されます。 seqnumで注文したすべての文書をリストすると、データの進化のタイムラインが得られます。

_changes APIを呼び出すと、そのリストが取得されます。そして、すべてのリビジョンがその中に保存されているので(変更のデルタだけでなく)、そのデータベースで変更されたすべてのものを再構築することができます。具体的にはseqnumです。

圧縮を実行すると、古い文書のリビジョンは削除されますが、seqnumまたは_changesのデータには影響しません。これは、_changesが最新の(実際の)リビジョンのみを表示するためです。

+2

+1いい回答です。私はコンパクションポイントを明確にする自由を取った後、あなたの最初のイントロへのアップデートを少し取り消しました。あなたが気にしないことを願っています。 – JasonSmith

+0

問題ありません: –

+1

データベース内のすべてのドキュメント(最新のリビジョン番号を含む)がリストにあります(削除されたドキュメント)。 – Alumni