CouchDb文档指出,默认情况下,对单个文档的读取和写入都是仲裁读取和写入(例如r=2
,w=2
在 3 副本系统中)。
但是,文档_find
说 r “默认为 1,在这种情况下返回在索引中找到的文档。如果设置为更高的值,则每个文档在返回之前至少从那么多副本中读取......”它我不是 100% 清楚,但这到底意味着什么。如果我运行_find
并r=2
在单个节点的索引中找到一个文档,我认为很明显它还会从第二个节点获取该文档并将最新的返回给我。但是,我认为它仍然只检查一个节点上的索引,因此无法保证健康集群中的一致性。
例如,假设我有一个健康的 3 节点集群,没有网络分区。该集群中的数据库有一个 Mango 索引,其中包括字段foo
,我通过 查询_find
所有带有foo=bar
. 假设最初的文档X
具有价值foo=baz
,因此X
不应返回。现在,我更新X
设置foo=bar
并使用w=2
. 然后我立即重新运行我_find
的 with r=2
。如果仅在一个节点上查询索引X
,那么即使使用r=2
. 也一样r=2
仅意味着在一个节点的索引中找到的文档也将在第二个节点上查找,或者这是否意味着 2 个节点上的索引将运行查询并合并它们的结果。
此外,似乎相同的索引和r=1
默认值可能适用于 JavaScript MapReduce 视图,但我没有看到这种情况的等效文档。MapReduce 视图查询是否默认为r=1
or r=2
?