CouchDB更改了Feed seq shift

时间:2016-09-06 02:49:31

标签: couchdb nosql

我是CouchDB的新手,假设我的_changes feed包含8000行,last_seq为8000.然后我更新了一个文档(之前已使用seq = 4000-xxxx,rev = 1-xxxxx更新),它将是反映在更改Feed上,seq = 8001-xxxx,rev = 2-xxxx对吗?

我的问题是CouchDB究竟如何处理这个问题?当我更新文档时,它获取最新的seq id(8001-xxxx),但哪个doc占用了它的旧位置(seq 4000-xxxx)?由于我们正在更新内容,每个文档只有一个条目,更改源中的行如何从8000上升到8001?

2 个答案:

答案 0 :(得分:2)

史蒂芬。

更新文档时,移动到seq队列的末尾。因此,序列索引中将存在“漏洞”,旧文档曾经存在。

在您的示例中,更改Feed将显示8,000行,last_seq = 8001,您将看到seq 1,2,3,...,3997,3998,3999,4001,4002,4003, ...,7999,8000,8001。请注意序列中缺少4000个。

这种“举动”保证是原子的;因此,如果您查询_changes,那么您将看到填充seq 4000,或填充8001但不是两者。每个文档ID都只在序列索引中一次。

(小注意,如果您使用?feed=continuous查询_changes ,那么您当然可以看到重复的文档ID,因为CouchDB会在任何时候为您提供实时Feed得到更新。)

答案 1 :(得分:0)

我发现对于不必要的文档所做的最新更改将获得Cloudant中_changes feed中的latest_seq + 1,如此处所详述。

https://gist.github.com/smithsz/30fb97662c549061e581