Couchbase 中的 REQUEST_PLUS 和 STATEMENT_PLUS ScanConsistency 到底有什么区别?
What exactly is the difference between REQUEST_PLUS and STATEMENT_PLUS ScanConsistency in Couchbase?
我无法理解请求和声明之间的区别以及一致性与它们之间的关系。
RequestPlus
确保查询时所有文档都已编入索引。
AtPlus
(或StatementPlus
)确保指定的文档已被索引。
- 这允许在不延迟其他写入的情况下读取您自己的写入。
例如:
- 存储桶
B
包含一个文档。
SELECT COUNT(1) FROM B
-> 结果是 1
.
- 您插入了 ID 为
a
的文档
- 插入了另一个 ID 为
b
的文档
SELECT COUNT(1) FROM B
- 与"Not Bounded"(默认)一致性->返回至少
1
的即时结果。
- 具有 "AtPlus" 一致性,指定
a
发生突变的附加状态 -> 在索引中更新文档 a
后至少 2
的结果。
- 具有 "RequestPlus" 一致性 ->
3
索引完全赶上后的结果。
一些补充说明。
无论好坏,Couchbase 允许您控制在执行查询后何时更新索引。非常不幸的是,执行查询时的默认行为是一种 'eventual' 一致性。
实际上,这意味着顺序查询(其中第二个查询取决于第一个查询的结果)极有可能失败并产生不一致的结果,因为所使用的索引执行第二个查询尚未更新。
选择最终一致性作为 Couchbase 中的默认选项让我感到困惑。性能很重要。但可以说很少,如果有的话,比一致性更重要(批量插入后忘记操作除外),并且 尤其是 不在网络中应用上下文。
因此,除非您将 Couchbase 用作纯数据仓库(主要是写入,很少读取),否则您需要记住为绝大多数查询手动将一致性设置为 REQUEST_PLUS
,或为疯狂做好准备。
我无法理解请求和声明之间的区别以及一致性与它们之间的关系。
RequestPlus
确保查询时所有文档都已编入索引。AtPlus
(或StatementPlus
)确保指定的文档已被索引。- 这允许在不延迟其他写入的情况下读取您自己的写入。
例如:
- 存储桶
B
包含一个文档。 SELECT COUNT(1) FROM B
-> 结果是1
.- 您插入了 ID 为
a
的文档
- 插入了另一个 ID 为
b
的文档
SELECT COUNT(1) FROM B
- 与"Not Bounded"(默认)一致性->返回至少
1
的即时结果。 - 具有 "AtPlus" 一致性,指定
a
发生突变的附加状态 -> 在索引中更新文档a
后至少2
的结果。 - 具有 "RequestPlus" 一致性 ->
3
索引完全赶上后的结果。
- 与"Not Bounded"(默认)一致性->返回至少
一些补充说明。
无论好坏,Couchbase 允许您控制在执行查询后何时更新索引。非常不幸的是,执行查询时的默认行为是一种 'eventual' 一致性。
实际上,这意味着顺序查询(其中第二个查询取决于第一个查询的结果)极有可能失败并产生不一致的结果,因为所使用的索引执行第二个查询尚未更新。
选择最终一致性作为 Couchbase 中的默认选项让我感到困惑。性能很重要。但可以说很少,如果有的话,比一致性更重要(批量插入后忘记操作除外),并且 尤其是 不在网络中应用上下文。
因此,除非您将 Couchbase 用作纯数据仓库(主要是写入,很少读取),否则您需要记住为绝大多数查询手动将一致性设置为 REQUEST_PLUS
,或为疯狂做好准备。