我是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?
答案 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,如此处所详述。