couchdb - 在 CouchDb 中为 _find 和 MapReduce 查询读取 quorum
问题描述
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
?
解决方案
我在 CouchDb Slack 上发布了指向上述内容的链接并得到了回复:
map/reduce 视图(由 _view 访问)是 r=1 并且为 _find 提到的 r 参数我认为仅指我们获取文档的时间,而不是查询本身运行的时间,但我对此不是 100% 确定的。
这不是一个确定的答案,所以我没有将其标记为正确,但它绝对是我之前拥有的更多信息。
推荐阅读
- java - 无法解析为 Java 中的变量
- c - 为什么STM32F1 CAN通信每条消息只发送一个脉冲?
- multithreading - Web 服务器线程和应用程序线程之间的区别
- python - 如何使用 BERT 模型来预测与没有标签的数据集的句子语义相似度?
- firebase - 如何在firebase实时数据库安全规则中制定规则,以便只有那些用户在特定时间段内才能写入数据?
- python - 在python中限制pdp图的轴范围
- r - 用 np 包从数据框中简洁地编写一个包含许多变量的公式
- java - 如何发送 HTTP Ok 请求,而方法仍然完成?
- javascript - 如何在javascript cavas中每5秒移动一个矩形?
- hadoop - Jersey 服务器、servlet 3 和 HK2 注入和 Vaadin:无法在 Hadoop 二进制文件中找到可执行的 null\bin\winutils.exe,但未使用 Hadoop