默认 MongoDB 读关注/写关注
读关注 (read concern)
默认读关注
默认的读关注(read concern)如下:
指定读关注:MongoDB 驱动程序
以下信息适用于在事务外部运行的操作。有关与事务内部运行的操作相关的读关注(read concern)信息,请单击 Operations in Transactions
标签页。
使用 MongoDB驱动程序,您可以覆盖默认的读关注(read concern)并为以下级别的操作设立读关注(read concern):
等级 | 说明 |
---|---|
客户端级别 | 适用于操作,除非在数据库/集合/操作级别为操作设置了更精细的读关注。 |
数据库级别 | 适用于对数据库的集合执行的操作(即覆盖客户端读关注),除非已在集合级别或操作级别设置读关注。 不适用于事务内部的操作。 |
集合级别 | 适用于对集合执行的读取操作(即覆盖数据库/客户端读关注),除非已在操作级别设置读关注。 不适用于事务内部的操作。 |
操作级别 |
以下信息适用于在事务内部运行的操作。有关与在事务外部运行的操作相关的读关注(read concern)信息,请单击Operations outside Transactions
标签页。
使用MongoDB驱动程序,您可以覆盖默认的读关注(read concern)并为以下级别的事务设立读关注(read concern):
等级 | 说明 |
---|---|
客户端级别 | 适用于事务,除非在会话/事务级别设置了更细粒度的读关注。 事务中的所有操作都使用ACID 事务读关注(read concern):在操作、集合或数据库级别设立的任何读关注(read concern)在ACID 事务ACID 事务都会被忽略。 |
会话级别 | 适用于会话中启动的事务(即覆盖客户端读关注),除非在特定事务级别设置了更细粒度的读关注级别。 事务中的所有操作都使用ACID 事务读关注(read concern):在操作、集合或数据库级别设立的任何读关注(read concern)在ACID 事务ACID 事务都会被忽略。 有关详细信息,请参阅事务和读关注。 |
事务级别 | 适用于具体事务(即覆盖客户端/会话读关注)。 事务中的所有操作都使用ACID 事务读关注(read concern):在操作、集合或数据库级别设立的任何读关注(read concern)在ACID 事务ACID 事务都会被忽略。 有关详细信息,请参阅事务和读关注。 |
更多信息
有关可用都关注的更多信息,请参阅读关注。
写关注
默认写关注
从 MongoDB 5.0 开始,隐式默认写关注为 w: majority
。但是,对于包含仲裁节点的部署,需要特别考虑以下事项:
副本集的投票多数是 1 加投票成员数量的一半,四舍五入。如果数据承载投票成员的数量不超过投票多数,则默认写关注为
{ w: 1 }
。在所有其他场景中,默认写关注为
{ w: "majority" }
。
具体来说,MongoDB 使用以下公式来确定默认写关注:
if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ] defaultWriteConcern = { w: 1 } else defaultWriteConcern = { w: "majority" }
例如,考虑以下部署以及各自的默认写关注:
Non-Arbiters | 仲裁节点 | 投票节点 | 多数投票节点 | 隐式默认写关注 |
---|---|---|---|---|
2 | 1 | 3 | 2 |
|
4 | 1 | 5 | 3 |
|
在第一个示例中:
有 2 个非仲裁节点和 1 个仲裁节点,共有 3 个投票节点。
多数投票节点(1 加 3 的一半,四舍五入)为 2。
非仲裁节点的数量 (2) 等于多数投票节点 (2),导致隐式写关注为
{ w: 1 }
。
在第二个示例中:
共有 5 个投票节点,其中有 4 个非仲裁节点和 1 个仲裁节点。
多数投票节点(1 加 5 的一半,四舍五入)为 3。
非仲裁节点的数量 (4) 大于多数投票节点 (3),导致隐式写关注为
{ w: "majority" }
。
指定写关注:MongoDB 驱动程序
以下信息适用于在事务外部运行的操作。有关与事务内部运行的操作相关的读关注(read concern)信息,请单击 Operations in Transactions
标签页。
使用 MongoDB 驱动程序,您可以覆盖默认写关注,并在以下级别为操作设置写关注:
等级 | 说明 |
---|---|
客户端级别 | 适用于操作,除非在操作/数据库/集合级别为操作设置了更精细的写关注。 |
数据库级别 | 适用于对数据库的集合执行的写入操作(即覆盖客户端写关注),除非在集合级别或操作级别设置了写关注。 不适用于事务内部的操作。 |
集合级别 | 适用于对集合执行的写入操作(即覆盖数据库和客户端写关注),除非在操作级别设置了写关注。 不适用于事务内部的操作。 |
操作级别 |
以下信息适用于在事务内部运行的操作。有关与在事务外部运行的操作相关的读关注(read concern)信息,请单击Operations outside Transactions
标签页。
使用 MongoDB 驱动程序,您可以覆盖默认写关注,并在以下级别为事务设置写关注:
等级 | 说明 |
---|---|
客户端级别 | 适用于事务,除非在会话/事务级别设置了更细粒度的写关注。 事务写关注适用于提交操作和事务内的操作。 事务中的所有操作都使用ACID 事务写关注(write concern):在操作、集合或数据库级别设立的任何写关注(write concern)在ACID 事务ACID 事务都会被忽略。 |
会话级别 | 适用于在会话中启动的事务,除非在特定事务级别设置了写关注级别。 事务写关注适用于提交操作和事务内的操作。 事务中的所有操作都使用ACID 事务写关注(write concern):在操作、集合或数据库级别设立的任何写关注(write concern)在ACID 事务ACID 事务都会被忽略。 |
事务级别 | 适用于特定ACID 事务。 事务写关注适用于提交操作和事务内的操作。 事务中的所有操作都使用ACID 事务写关注(write concern):在操作、集合或数据库级别设立的任何写关注(write concern)在ACID 事务ACID 事务都会被忽略。 |
有关更多信息,请参阅事务和写关注。
更多信息
有关可用写关注的更多信息,请参阅写关注。
因果一致性保证
使用因果一致的客户端会话时,只有在以下情况下,客户端会话才能保证因果一致性:
关联的读取操作使用
"majority"
读关注,而关联的写入操作使用
"majority"
写关注。