couchdb更改通知

时间:2011-01-19 17:26:36

标签: couchdb

更改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中

对于我的测试数据库,似乎是这样,但是如果我有一个大型数据库呢?

1 个答案:

答案 0 :(得分:11)

每次写入数据库都会被称为seqnum。 (或序列号)这些写入的日志与文档_id_rev一起存储,以及有关写入的其他信息。 (在线查看CouchDB书籍的this section。)新创建的文档将获得下一个seqnum(旧seqnum + 1)。另一方面,文档更新还会附加新的seqnum,但也会从日志中删除文档的旧文档。如果列出seqnum订购的所有文档,则会得到数据演变的时间表。

调用_changes API检索该列表。并且由于每个修订都保存在它的整体中(不仅仅是更改的增量),因此您可以重建自特定seqnum以来该数据库中已更改的所有内容。

运行压缩会删除旧的文档修订,但不会影响seqnum或_changes数据。这是因为_changes只显示文档的最新(实时)版本。