Couchdb watch changes feed在集群模式下返回相同自值的随机更改

Couchdb watch changes feed在集群模式下返回相同自值的随机更改,couchdb,Couchdb,据互联网报道。您向/\u changes?since=0&limit=1请求更改,然后使用last_seq值并传递到since并再次请求 我的问题是,这会跳过更改。您可以不断请求/\u更改?因为=0&limit=1,并反复获得不同的更改。只是偶尔实际获取对数据库的第一次更改。有时您会得到第7次更改,或第4次更改,等等。如果您然后重复,但使用last_seq值,它会向前跳过,据我所知,它永远不会返回并获得它跳过的更改 在使用集群时,是否有一种不使用sockets方法而定期监视couchdb变更提要

据互联网报道。您向
/\u changes?since=0&limit=1
请求更改,然后使用
last_seq
值并传递到
since
并再次请求

我的问题是,这会跳过更改。您可以不断请求
/\u更改?因为=0&limit=1
,并反复获得不同的更改。只是偶尔实际获取对数据库的第一次更改。有时您会得到第7次更改,或第4次更改,等等。如果您然后重复,但使用
last_seq
值,它会向前跳过,据我所知,它永远不会返回并获得它跳过的更改

在使用集群时,是否有一种不使用sockets方法而定期监视couchdb变更提要的正确方法


我们现在拥有的是一个php脚本,它运行在一个cron任务上,请求最后1000个更改,然后通过它们工作并同步SQL数据库以匹配couchdb中的内容。couchdb跳过更改,这是一个大问题。

couchdb 2.x文档声明():

\u changes返回的结果是按部分顺序排列的。换句话说,不能保证在多次调用时保留顺序

因此,当您调用/_changes?因为=0&limit=1,您会得到一个不同的结果,因为无法保证订单

_changes响应包含一个挂起属性,该属性具有响应之外的元素数。如果您从上一个请求中获取最后一个_seq值,并在下一个请求中使用该值作为since属性,您将获得下一批更改,并且挂起的值将持续减少

此外,您还应注意下一个文档注释:

如果在任何给定的值中指定的碎片副本不可用,则选择替代副本,并使用它们之间的最后一个已知检查点。如果发生这种情况,您可能会再次看到以前看到的更改。因此,使用_changes提要的应用程序应该是“幂等的”,即能够多次安全地接收相同的数据

批量读取更改是CouchDB兼容客户端作为Cloudant Sync使用的CouchDB复制协议()的建议,因此您描述的方法应该是正确的

请不要使用change seq的数值作为参考来推断是否有遗漏的更改,因为此数字是根据群集状态计算的,而群集状态在调用之间可能有所不同。您可以查看更多详细信息