默认MongoDB读关注点/写关注点
读关注点
默认读关注点
的默认 读关注点如下
指定读取关注度:MongoDB 驱动
以下信息适用于运行在事务之外的操作。有关运行在事务内部的操作的读取关注度信息,请点击“事务内操作
”标签页。
使用MongoDB 驱动,您可以覆盖默认的读取关注度,并为以下级别的操作设置读取关注度
级别 | 描述 |
---|---|
客户端级别 | 适用于操作,除非在数据库/集合/操作级别设置了更精细的读取关注度。 |
数据库级别 | 适用于数据库集合上的操作(即覆盖客户端读取关注度),除非在集合级别或操作级别设置了读取关注度。 不适用于事务内的操作。 |
集合级别 | 适用于集合上的读取操作(即覆盖数据库/客户端读取关注度),除非在操作级别设置了读取关注度。 不适用于事务内的操作。 |
操作级别 |
以下信息适用于运行在事务内的操作。有关运行在事务之外的操作的读取关注度信息,请点击“事务外操作
”标签页。
使用MongoDB 驱动,您可以覆盖默认的读取关注度,并为以下级别的事务设置读取关注度
级别 | 描述 |
---|---|
客户端级别 | 适用于事务,除非在会话/事务级别设置了更精细的读取关注度。 事务内的所有操作都使用事务读取关注度:任何在操作、集合或数据库级别设置的读取关注度在事务内部都将被忽略。 |
会话级别 | |
事务级别 |
附加信息
有关可用的读取关注点的更多信息,请参阅读取关注点。
写入关注点
默认写入关注点
从MongoDB 5.0开始,隐式默认写入关注点是w: majority
。但是,对于包含仲裁者的部署,需要特殊考虑:
副本集的投票多数是投票成员数加半数,向下取整。如果数据承载的投票成员数不大于投票多数,则默认写入关注点是
{ w: 1 }
。在其他所有情况下,默认的写入关注点是
{ w: "majority" }
。
具体来说,MongoDB 使用以下公式来确定默认的写入关注点
if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ] defaultWriteConcern = { w: 1 } else defaultWriteConcern = { w: "majority" }
例如,考虑以下部署及其各自的默认写入关注点
非仲裁者 | 仲裁者 | 投票节点 | 投票节点中的大多数 | 隐式默认写入关注点 |
---|---|---|---|---|
2 | 1 | 3 | 2 | { w: 1 } |
4 | 1 | 5 | 3 | { w: "majority" } |
在第一个例子中
有2个非仲裁者和1个仲裁者,总共3个投票节点。
投票节点中的大多数(1加上3的一半,向下取整)是2。
非仲裁者的数量(2)等于投票节点中的大多数(2),导致隐式写入关注点为
{ w: 1 }
。
在第二个例子中
有4个非仲裁者和1个仲裁者,总共5个投票节点。
投票节点中的大多数(1加上5的一半,向下取整)是3。
非仲裁者的数量(4)大于投票节点中的大多数(3),导致隐式写入关注点为
{ w: "majority" }
。
指定写入关注点:MongoDB 驱动
以下信息适用于运行在事务之外的操作。有关运行在事务内部的操作的读取关注度信息,请点击“事务内操作
”标签页。
使用 MongoDB 驱动,您可以覆盖默认的 写入关注点 并设置以下级别的写入关注点
级别 | 描述 |
---|---|
客户端级别 | 适用于操作,除非在操作/数据库/集合处设置了更细粒度的写入关注点。 |
数据库级别 | 适用于数据库集合上的写入操作(即覆盖客户端写入关注点),除非在集合级别或操作级别设置了写入关注点。 不适用于事务内的操作。 |
集合级别 | 适用于集合上的写入操作(即覆盖数据库和客户端写入关注点),除非在操作级别设置了写入关注点。 不适用于事务内的操作。 |
操作级别 |
以下信息适用于运行在事务内的操作。有关运行在事务之外的操作的读取关注度信息,请点击“事务外操作
”标签页。
使用 MongoDB 驱动,您可以覆盖默认的 写入关注点 并设置以下级别的 事务 写入关注点
级别 | 描述 |
---|---|
客户端级别 | 适用于事务,除非在会话/事务级别设置了更细粒度的事务写入关注点。 事务写入关注点适用于提交操作以及事务内的操作。 事务内的所有操作都使用事务写入关注点:在操作、集合或数据库级别设置的任何写入关注点,在事务内都会被忽略。 |
会话级别 | 除非在特定事务级别设置写入关注点级别,否则适用于会话中启动的事务。 事务写入关注点适用于提交操作以及事务内的操作。 事务内的所有操作都使用事务写入关注点:在操作、集合或数据库级别设置的任何写入关注点,在事务内都会被忽略。 |
事务级别 | 适用于特定事务。 事务写入关注点适用于提交操作以及事务内的操作。 事务内的所有操作都使用事务写入关注点:在操作、集合或数据库级别设置的任何写入关注点,在事务内都会被忽略。 |
有关更多信息,请参阅事务和写入关注点。
更多信息
有关可用写入关注点的更多信息,请参阅写入关注点。
因果一致性保证
在因果一致性的客户端会话中,只有当
相关读取操作使用
"majority"
读取关注点,并且相关写入操作使用
"majority"
写入关注点时,客户端会话才保证因果一致性。