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 更改通知的主要内容,如果未能解决你的问题,请参考以下文章