couchdb 更改通知

Posted

技术标签:

【中文标题】couchdb 更改通知【英文标题】:couchdb change notifications 【发布时间】:2011-01-19 17:26:36 【问题描述】:

更改 API 的实际作用是什么?它是否列出了每个文档的最新修订 + 已删除的文档?

或者这样说:

couchdb 的变更通知功能能否用于列出所有匹配查询的文档?

例如,如果我有过滤功能:

search = function(doc,req)

  return (doc.min && doc.max && doc.min < req.query.q && doc.max > req.query.q)

我会在这里得到所有匹配 doc.min

http://服务器/数据库/_changes? filter=doctype/search & q=somevalue

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

+1 好答案。我冒昧地澄清了压缩点,然后我对你最初的介绍的更新有点忘乎所以。希望你不要介意。 所以数据库中的所有文档(带有最新修订号)都将在列表中(以及那些被删除的文档)? 正确,在您运行压缩之前,您仍然可以使用有效的_rev 编号检索已删除的文档。 谢谢!我唯一需要的是运行我在 all 现有文档上定义的过滤器功能。我想我把事情搞清楚了:) Dominic,请您帮忙,如何找回刚刚删除的文档?我得到 "_id":"25efa4ec8489d8b89b34c5cad6000059","_rev":"3-a982bd6dccce8f405433f8453ab86880","_deleted":true,但我想获取它的内容,但 _changes 日志中没有 rev=2。

以上是关于couchdb 更改通知的主要内容,如果未能解决你的问题,请参考以下文章

CouchDB 中的 _users 数据库不允许使用 HTTP OPTIONS 方法

CouchDB sys.config 文件位置

CouchDB _changes-API 过滤器

couchDB designDoc 开发工作流程和版本控制

Couchdb 数据库每用户设计文档管理

Couchdb 数据库每用户设计文档管理