CouchDB 更改 feed seq 移位

标签 couchdb nosql

我是 CouchDB 新手,假设我的 _changes feed 包含 8000 行,last_seq 为 8000。然后我更新一个文档(之前已使用 seq=4000-xxxx、rev=1-xxxxx 更新),它将是反射(reflect)在更改源上为 seq=8001-xxxx,rev=2-xxxx,对吗?

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

最佳答案

史蒂文。

当您更新文档时,它会移动到 seq 队列的末尾。因此,旧文档所在的序列索引中将会出现“漏洞”。

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

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

(小注意,如果您连续查询_changes,使用?feed=连续,那么您当然可以看到重复的文档ID,因为CouchDB为您提供了真实的-每当文档更新时就及时反馈。)

关于CouchDB 更改 feed seq 移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339930/

相关文章:

javascript - 从 javascript 访问 CouchDB

couchdb - _replicator 数据库不可扩展或我的设计需要调整

mysql - wordpress 和 node.js

node.js - MongoDb 数据关系

python - CouchDB - 从列表中过滤每个记录实例的最新日志

couchdb - 如何从 CouchDB 复制到 PouchDB?

database - 查找缺少任意字段的 CouchDB 文档

nosql - 访问与 neo4j 中的关系相反的节点的查询是什么

sql - 快速单表数据库