4

I use a cloudant couchdb and I've noticed see that the "_changes" query on the database returns an "update_sequence" that is not a number, e.g.

"437985-g1AAAADveJzLYWBgYM..........".

What is more, the response is not stable: I get 3 different update_sequences if a query the db 3 times.

Is there any change in the known semantics of the "update_sequence", "since", etc. or what?

Regards, Vangelis

4

2 回答 2

2

转述罗伯特之前给出的答案:

更新序列值是不透明的。在 CouchDB 中,它们目前是整数,但在 Cloudant 中,值是数据库每个分片的序列值的编码。随着集群支持的增加(通过 BigCouch 合并),CouchDB 将来可能会采用这种方式。

在 CouchDB 和 Cloudant 中,_changes 将返回一个“seq”值,如果您将其作为“since”传回,则保证返回更新的更新的每一行。在故障转移的情况下,这可能包括您已经看到的更改。

因此,自特定更新序列以来读取更改的正确方法是这样的;

  1. 调用 /dbname/_changes?since=
  2. 阅读整个响应,随时应用更改
  3. 将 last_seq 值记录为新的检查点 seq 值。

不要解释这两个值,你不能比较它们是否相等。如果需要,您可以在步骤 2 中记录任何“seq”值作为当前检查点 seq 值。你不能做的关键事情是比较它们。

于 2013-12-09T09:57:41.213 回答
1

它会跳来跳去,表示是一个打包的 base64 字符串,表示数据库每个分片的各种副本的 update_seq。它不能是一个简单的整数,因为它是分布式数据库的快照。

至于 CouchDB,将 update_seq 视为不透明的 JSON,就可以了。

于 2013-12-08T22:19:22.770 回答