[mongoDB] 事务(1)

mongoDB 4.0 在副本集群上支持了多文档事务;4.2后,在分片集群上也支持了多文档事务。

支持多文档事务,对mongoDB来说无疑是质的飞越,极大地拉近了其与主流数据库的距离,甚至有超越的态势。我的部门就是采用mongoDB作为主库,业务目前来说很稳定。mongoDB的灵活数据模型使得它非常适合快速迭代的业务,副本集和分片集群架构也非常适合需要存储海量数据的业务。

下面是自己总结的一些知识,具体细节还是得去看看各个大神的博客和官方文档。

事务的发展过程

mongoDB3.6以前,mongod为每一个请求都创建一个上下文,上下文范围内,对数据、索引、oplog的修改都呈原子性;session是3.6后引入的概念,多个请求共享一个上下文,这是多文档事务的基础;mongoDB 4.0以上开始支持副本集事务;4.2以上支持分片集群事务。

基础概念

要了解mongo事务,必须知道以下4级标题的5个概念,除非你还是用单点mongod。

副本集

一主多从的集群。
主节点只能有一个,从节点可以有多个,最多是50个副本节点,比较常见的是一主两从的副本集模式。
在这里插入图片描述

分片集群

分片集群比副本集群的架构更复杂,可以说是副本集群的升级,体现在横向扩展性(只有一个主节点,横向扩展性差)和高可用性上。分片集群框架涉及到4个节点,分别是:路由节点(mongos)、配置节点(config)、数据节点(shard)。路由节点负责将客户端请求分发到对应的shard。配置节点存放数据和分片的关系,也就是存储着哪些数据在哪个分片的记录。数据节点就是一个shard,每个shard都是一个副本集,且每个shard的数据不重复,所有shard合起来就是完整的数据,shard可以达到1024个。
单点、副本集、分片集群架构对比图
单点、副本集、分片集群架构对比图
分片集群架构图
分片集群架构图

写关注(write concern)

写关注(write concern):写关注的值决定主节点对客户端的写请求的响应时间和结果的准确度。w的值有1~majority,不能等于所有节点数,这样非常影响mongo高可用性。w的值越趋于安全值,客户端等待回应的时间会越长,但结果更安全、更准确。w:1,主节点写入数据成功后立即返回写入成功结果到客户端;w:2,主节点写入数据成功,且一个从节点成功同步数据后,才返回写入成功到客户端;w:majority,主节点写入数据成功,且大多数从节点同步数据后,才返回写入成功到客户端。
其实写关注并不太影响存储引擎的运行效率,因为就算w:0,存储引擎也会将主节点的数据同步到所有从节点,相对于存储引擎写关注对客户端的影响要显著得多。具体详情参考官网
在这里插入图片描述

读偏好(read preference)

读偏好决定了mongod去哪个节点找数据。先说5个模式(5个mode),分别是:
在这里插入图片描述
在这里插入图片描述

比较好理解,就不逐一说明了,如果要做读写分离,读的时候,设置读偏好为secondaryPreferred(优先读从节点的数据,若丛节点都挂了,读主节点)。

再说3个条件,条件是在符合模式的基础上,再根据条件删选具体的节点。5个模式决定了去哪个从节点读,而具体是读哪个节点呢?由3个条件决定,读官网文档发现,这三个条件都不能用于mode=primary的时候,想想也是,主节点只有一个,用不着选,所以三个条件应该是针对集群上有多个从节点的情况。
在这里插入图片描述

TIP
模式为primary或者条件使用tag sets都要提别注意节点挂掉的情况,否则会影响mongo可用性。

读关注(read concern)

读到的数据的”“新鲜度”和持久性。**这个属性+写关注可以控制事务的ACID。**如果说读偏好决定去哪个节点读数据,而读关注决定了读节点上的哪些数据,或者说哪些数据能读哪些数据不能读。

读关注也有五种级别,比较常用的是majority级别,写关注和读关注都设置为majoirity,能使事务级别达到读提交,这种设定已经满足绝大部分业务需求了。linearizable使事务级别提升为可重复读,snapshot使事务提升为串行读。
在这里插入图片描述
在这里插入图片描述

第2节说说golang的mongo驱动如何来使用事务,我将用两个demo来演示。

参考:
https://www.mongodb.com/docs/v4.4/reference/write-concern/
https://www.mongodb.com/docs/v4.4/core/read-preference/#std-label-replica-set-read-preference
https://www.mongodb.com/docs/v4.4/reference/read-concern/
https://jelly.jd.com/article/5f990ebbbfbee00150eb620a
https://segmentfault.com/a/1190000038994491

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值