MongoDB写操作事务


MongoDB 写操作事务

一、什么是 writeConcern?

  1. writeConcern 决定一个写操作落到多少个节点上才算成功。
  2. writeConcern 的取值包括:
    • 0:发起写操作,不关心是否成功;
    • 1~集群最大数据节点数:写操作需要被复制到指定节点数才算成功;
    • majority:写操作需要被复制到大多数节点上才算成功;
  3. 发起写操作的程序将阻塞到写操作到达指定的节点数为止

二、writeConcern 设置

—:数据写入过程
—:数据同步过程

1. 3 节点复制集不作任何特别设定(默认值):

image.png

注:存在丢数据的可能

2. w:”majority”

大多数节点确认模式
image.png

注:可防止主节点宕机数据丢失

3. w:”all”

全部节点确认模式
image.png

注:最安全的做法,弊端是如果其中有一个节点宕机写操作就无法完成

三、journal 设置

1. j:true

writeConcern可以决定写操作到达多少个节点才算成功,journal则定义如何才算成功。
取值包括:

  • true:写操作落到 journal 文件中才算成功;
  • false:写操作到达内存即算作成功。

image.png

四、writeConcern 的意义

对于5 个节点的复制集来说,写操作落到以下节点上才算是安全的:

  • 3
  • 4
  • 5
  • majority

五、注意事项

  • 虽然多于半数的 writeConcern 都是安全的,但通常只会设置 majority,因为这是等待写入延迟时间最短的选择;
  • 不要设置 writeConcern 等于总节点数,因为一旦有一个节点故障,所有写操作都将失败;
  • writeConcern 虽然会增加写操作延迟时间,但并不会显著增加集群压力,因此无论是否等待,写操作最终都会复制到所有节点上。设置 writeConcern 只是让写操作等待复制后再返回而已;
  • 应对重要数据应用 {w: “majority”},普通数据可以应用 {w: 1} 以确保最佳性能。

文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录