开发者

couchdb change notifications

What does the changes API actually do? does it list the last revision of each document + deleted documents?

or to put it this way:

开发者_开发知识库Can the change notifications feature of couchdb be used to list all the documents that match a query?

For example, if I have the filter function:

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

will I get all the documents that match doc.min < somevalue < doc.max here?

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

For my test database it appears to be so, but what if I have a large database?


Every write to the database is given what is known as a seqnum. (or sequence number) A log of those writes is stored with the document _id, _rev, amongst other information about the write. (See this section of the CouchDB book online.) A newly-created document gets the next seqnum (old seqnum + 1). A document update, on the other hand, also appends a new seqnum but also removes the document's old one from from the log. If you list all documents ordered by seqnum, you get a timeline of the evolution of the data.

Calling the _changes API retrieves that list. And since every revision is saved in it's entirity (not just a delta of changes) then you can reconstruct everything that has changed in that database since a particular seqnum.

Running a compaction removes old document revisions, but does not affect the seqnum or _changes data. This is because _changes shows only the latest (live) revisions of the documents.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜