0

在使用_changesCouchDB (2.1.1) 中的 API 时,我注意到seq当我添加?include_docs=true. 这是预期的吗?如果是,有人可以帮助我理解其背后的逻辑吗?

更多信息:

  • 创建一个数据库,我称之为测试: 创建一个新的测试数据库

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

创建的测试文件

  • 现在调用 API 两次,一次调用 the,另?include_docs=true一次不调用。 在此处输入图像描述

打电话 ?include_docs=true

在此处输入图像描述

打电话 ?include_docs=true

在此处输入图像描述

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

4

1 回答 1

0

您必须考虑到 _changes 提要没有完全排序。更改是根据数据库的节点和分片集计算的。CouchDB 从不同的分片中检索更改,然后将它们组合成一个流。

更改提要的序列号背后的逻辑非常复杂,它反映了响应更改提要请求的每个分片的状态。

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

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

于 2018-08-28T07:35:32.530 回答