zoukankan      html  css  js  c++  java
  • 【Mongodb】 Mongodb 事务

    Mongodb事务

    Mongodb 写操作事务

    writeConcern

    writeConcern 决定一个写操作落到多少个节点上才算成功。
    writeConcern 的取值包括:
    • 0:发起写操作,不关心是否成功;
    • 1~n (集群最大数据节点数):写操作需要被复制到指定节点数才算成功;
    • majority:写操作需要被复制到大多数节点上才算成功。

    发起写操作的程序将阻塞到写操作到达指定的节点数为止

    属性

    w
    • all
    • 0~n
    • majority
    journal

    ( j: true / false)
    writeConcern是决定写操作落到多少个节点才算成功,
    journal定义如何才算成功;

    • journal: true 表示写到journal文件才算成功
    • journal: false 表示写入内存就算成功

    case: 对于5个节点的复制集来说,写操作落到多少个节点上才算是安全的?
    1,2,3,4,5,majority

    答案: 3 4 5 majority

    Mongodb shell 实验

    db.amber.insert( {count: 1}, {writeConcern: {w: 1, wtimeout:3000, j: true }})
    

    注意事项

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

    读操作事务(readPreferen)

    主要解决以下问题:

    • 什么是 readPreference
    • readPreference 的使用场景

    在读取数据的过程中我们需要关注以下两个问题:
    • 从哪里读?
    回答: readPreference 来解决
    • 什么样的数据可以读?
    回答: readConcern 来解决

    什么是readPreference?

    readPreference 决定使用哪一个节点来满足正在发起的读请求。可选值包括:

    • primary: 只选择主节点;
    • primaryPreferred:优先选择主节点,如果不可用则选择从节点;
    • secondary:只选择从节点;
    • secondaryPreferred:优先选择从节点,如果从节点不可用则选择主节点;
    • nearest:选择最近的节点;

    readPreference 场景举例

    • 用户下订单后马上将用户转到订单详情页——primary/primaryPreferred。因为此时从节点可能还没复制到新订单;
    • 用户查询自己下过的订单——secondary/secondaryPreferred。查询历史订单对时效性通常没有太高要求;
    • 生成报表——secondary。报表对时效性要求不高,但资源需求大,可以在从节点单独处理,避免对线上用户造成影响;
    • 将用户上传的图片分发到全世界,让各地用户能够就近读取——nearest。每个地区的应用选择最近的节点读取数据。

    readConcern

    什么是 readConcern?
    在 readPreference 选择了指定的节点后,readConcern 决定这个节点上的数据哪些是可读的,类似于关系数据库的隔离级别。可选值包括:
    • available:读取所有可用的数据;
    • local:读取所有可用且属于当前分片的数据;
    • majority:读取在大多数节点上提交完成的数据;
    • linearizable:可线性化读取文档;
    • snapshot:读取最近快照中的数据;

    常用的是local, 和majority

  • 相关阅读:
    Python Scarpy安装包
    pip install 出现报asciii码错误的问题
    pyhton 27 pip命令无法使用 没有Scripts文件夹 的解决方法
    北漂
    15再见,16你好。
    selenium By.xpath 用法
    java.util.NoSuchElementException解决办法
    Android版之数据库增删改查图书信息
    Android studio连接sqlserver数据库
    Android简易版图书管理系统
  • 原文地址:https://www.cnblogs.com/amberbar/p/13212537.html
Copyright © 2011-2022 走看看