添加include_docs = true时CouchDB seq号更改

时间:2018-08-27 16:01:35

标签: rest couchdb couchdb-2.0

在使用CouchDB(2.1.1)中的_changes API时,我注意到当添加seq时,结果记录的?include_docs=true数是不同的。这是预期的吗?如果是,有人可以帮助我理解其背后的逻辑吗?

更多信息:

  • 创建一个数据库,我称之为测试: Create a new Test Database

  • 在此新测试数据库上创建三个文件。这些可以只有ID,没有别的:

Test Files created

  • 现在两次调用API,一次调用?include_docs=true,一次不调用。 enter image description here

通过致电{strong> ?include_docs=true

enter image description here

呼叫 ?include_docs=true

enter image description here

如您所见,两个请求上的id值根据响应上条目的顺序而有所不同,而且seq哈希看起来相同,但其“字符串部分”为最后有所不同。所以我的问题是,考虑到我只想添加文档参考,为什么它们不一样?这是预期的吗?如果是,有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

您必须考虑_changes供稿未完全订购。根据数据库的节点和分片集计算更改。 CouchDB从不同的分片中检索更改,然后将它们组合成一个流。

变更馈送的序列号背后的逻辑非常复杂,并且反映了已响应变更馈送请求的每个分片的状态。

如果您解码seq binary_to_term(couch_util:decodeBase64Url(EncodedStringHere))的字符串部分,您将看到用于组成该文档的chages条目的分片的状态。

这里的问题是,您不能依赖更改供稿顺序,因为它可能会更改。