加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

发布时间:2018-12-18 22:00:51 所属栏目:编程 来源:贺春旸
导读:MongoDB 4.0已经宣布GA版本,而且有很多新成果和改造。在本文中,我们将重点存眷首要成果,毫无疑问,这是对多文档ACID事宜的支持。我们将环绕断绝级别、可一再读、幻读、事宜斗嘴检测等首要成果,通过尝试与MySQL逐一做比拟。 起首会简述先容下ACID事宜隔
副问题[/!--empirenews.page--]

MongoDB 4.0已经宣布GA版本,而且有很多新成果和改造。在本文中,我们将重点存眷首要成果,毫无疑问,这是对多文档ACID事宜的支持。我们将环绕断绝级别、可一再读、幻读、事宜斗嘴检测等首要成果,通过尝试与MySQL逐一做比拟。

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

起首会简述先容下ACID事宜断绝级别,然后再步入测试主题正文。

原子性(Atomicity):事宜包括的全部操纵要么所有乐成,要么所有失败,不存在乐成一半的观念。典规范子“西方二元对立头脑——非此即彼”:在二元逻辑系统中只存在两种逻辑值,就是对和错,或正和负,不存在既对又错或非正非负的其他状态。

同等性(Consistency):一个事宜执行之前和执行之后都必需处于同等性状态。典规范子:“金龙,你借我5000元,下个月开支给你。”岂论金龙用什么方法给我转账,分屡次转,乞贷竣事后我银行卡里的余额增进5000元,金龙卡里少了5000元,不能溘然蹦出来1万来。

断绝性(Isolation):数据库回收锁机制来实现事宜的断绝性,当多个事宜同时更新数据库中沟通的数据时,只应承持有锁的事宜能更新该数据,其他事宜必需守候,直到前一个事宜开释了锁,其他事宜才有机遇更新该数据。典规范子:“你去医院看病,要先到护士哪里分诊排号,假如多个患者加塞儿同时进来,医生就发飙了,出去列队,只能一个一个看”。

耐久性(Durability):事宜乐成提交后,它对数据库所做的修改就永世生涯下来,纵然数据库瓦解,数据还能规复到事宜乐成提交后的状态。典规范子:“你去ATM机取钱,功效ATM机妨碍了,你取出来了钱,卡里的余额不能没减。”

一、范围性与限定前提

1、多文档事宜仅合用于副本集。

注:假如是单机,需切到副本集模式。

2、仅合用于WiredTiger存储引擎。

3、假如你的架构是分片Sharding模式,事宜是不支持的。漫衍式事宜打算在4.2版本里支持。

4、事宜只支持CRUD操纵,DDL、DCL操纵不支持。

注:CRUD就是MySQL的DML,意思一样叫法差异罢了。

5、事宜无法在config、admin和local体系数据库中读取或写入。

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

6、事宜无法在system.*(体系荟萃)里写入。

7、不能有大事宜写入,写入集不能高出16MB(相同MariaDB Galera Cluster写入集wsrep_max_ws_size限定),不然客户端直接报错。

注:假若有大事宜,应该思量将这些大事宜拆分成多少块较小的事宜。譬喻将大于2018年的状态值变动为1,应思量轮回1万条一批量更新,这一点跟MySQL玩法一样。

二、我们第一个事宜

在开始事宜之前,必需建设会话。事宜不能在会话外运行。

  1. var session1 = db.getMongo().startSession()  
  2. var session2 = db.getMongo().startSession()  

Mongo Shell里引入了三个用于建设,提交和终止事宜的新呼吁:

  1. session.startTransaction() 

在当前会话中启动事宜

  1. session.commitTransaction() 

耐久生涯事宜中的操纵改观

  1. session.abortTransaction() 

终止事宜操纵所做的改观

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

1、在test库建设t1表,而且插入4条数据。

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

演示一

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

演示二

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

空闲事宜受transactionLifetimeLimitSeconds参数影响,默认60秒。

可通过以下呼吁查察:

  1. db.adminCommand( { getParameter: 1, transactionLifetimeLimitSeconds: 1 } ) 

假如你想在线改观,可以通过下面的呼吁配置:

  1. db.adminCommand( { setParameter: 1, transactionLifetimeLimitSeconds: 30 } ) 

也可以写死在/etc/mongod.cnf设置文件里永世见效,名目如下:

  1. setParameter = transactionLifetimeLimitSeconds=30 

注:空闲事宜是指当一个事宜长时刻未提交,那么这个毗连就不能封锁,内存就不开释,,并发一大,导致DB毗连数增多,就会对机能发生影响。默认是60秒,你可以按照本身的环境设定阈值。高出这个阈值,处事端自动杀死未提交的空闲事宜。

MySQL PK MongoDB:多文档事宜支持,谁更友爱?

三、事宜断绝性演示

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读