更改API实际上做了什么?它是否列出了每个文件的最后修订版+已删除的文件?
或者这样说:
可以使用couchdb的更改通知功能列出与查询匹配的所有文档吗?
例如,如果我有过滤功能:
search = function(doc,req)
{
return (doc.min && doc.max && doc.min < req.query.q && doc.max > req.query.q)
}
我将获得与doc.min相关的所有文件吗? somevalue&lt; doc.max在这里?
http:// server / database / _changes? filter = doctype / search&amp; Q = someValue中
对于我的测试数据库,似乎是这样,但是如果我有一个大型数据库呢?
答案 0 :(得分:11)
每次写入数据库都会被称为seqnum
。 (或序列号)这些写入的日志与文档_id
,_rev
一起存储,以及有关写入的其他信息。 (在线查看CouchDB书籍的this section。)新创建的文档将获得下一个seqnum
(旧seqnum + 1)。另一方面,文档更新还会附加新的seqnum
,但也会从日志中删除文档的旧文档。如果列出seqnum
订购的所有文档,则会得到数据演变的时间表。
调用_changes
API检索该列表。并且由于每个修订都保存在它的整体中(不仅仅是更改的增量),因此您可以重建自特定seqnum
以来该数据库中已更改的所有内容。
运行压缩会删除旧的文档修订,但不会影响seqnum或_changes数据。这是因为_changes只显示文档的最新(实时)版本。