CouchDB 改变了 feed seq shift

CouchDB changes feed seq shift

我是 CouchDB 的新手,假设我的 _changes 提要包含 8000 行,其中 last_seq 是 8000。然后我更新了一个文档(之前已经用 seq=4000-xxxx,rev=1- xxxxx),它会反映在更改提要上,如 seq=8001-xxxx, rev=2-xxxx 对吗?

我的问题是 CouchDB 实际上是如何处理这个问题的?当我更新文档时,它获得最新的 seq id (8001-xxxx) 但哪个文档取代了它的旧位置 (seq 4000-xxxx)?由于我们正在更新内容并且每个文档只有一个条目,更改提要中的行数如何从 8000 增加到 8001?

史蒂文.

当您更新文档时,它会移动 到 seq 队列的末尾。因此,您的序列索引中将有 "holes" 旧文档所在的位置。

在您的示例中,更改提要将显示 8,000 行,last_seq = 8001,您将看到序列 1、2、3、...、3997、3998、3999、4001、4002, 4003, ..., 7999, 8000, 8001。请注意序列中缺少 4000。

这个"move"保证是原子的;因此,如果您查询 _changes,那么您将看到填充的 seq 4000 或填充的 8001,但不会同时看到两者。每个文档 ID 在序列索引中恰好出现一次。

(小提示,如果你查询 _changes continuously,使用 ?feed=continuous 那么你当然会看到重复的文档 ID,因为 CouchDB 给你一个实时的随时更新文档。)

我发现在 Cloudant 的 _changes 提要中,对不必要的文档所做的最新更改将获得 latest_seq + 1,如此处详述。

https://gist.github.com/smithsz/30fb97662c549061e581