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

MySQL PK MongoDB:多文档事务支持,谁更友好?

发布时间:2018-12-31 09:13:26 所属栏目:MySql教程 来源:贺春旸
导读:MongoDB 4.0已经发布GA版本,并且有许多新功能和改进。在本文中,我们将重点关注主要功能,毫无疑问,这是对多文档ACID事务的支持。我们将围绕隔离级别、可重复读、幻读、事务冲突检测等主要功能,通过实验与MySQL一一做对比。 首先会简述介绍下ACID事务隔

此时新事务将无法获取所需的锁,并且在等待参数maxTransactionLockRequestTimeoutMillis后事务终止回滚,默认值是5毫秒。

MySQL PK MongoDB:多文档事务支持,谁更友好?

如果你想在线调整事务等待获取锁的时间,可以通过下面的命令设置:

  1. db.adminCommand( { setParameter: 1, maxTransactionLockRequestTimeoutMillis: 15 } ) 

也可以写死在/etc/mongod.cnf配置文件里永久生效,格式如下:

  1. setParameter = maxTransactionLockRequestTimeoutMillis=15 

演示二:可重复读

MySQL PK MongoDB:多文档事务支持,谁更友好?

Repeatable Read (可重复读)可避免脏读、不可重复读的发生。

不可重复读侧重点在于更新修改的数据,即在同一个事务里,两次查询的数据结果不一致。与脏读的区别是:脏读是一个事务读取了另一个事务未提交的脏数据。

演示三:幻读

MySQL PK MongoDB:多文档事务支持,谁更友好?

在MySQL默认隔离级Repeatable Read下,刚才的操作,在会话二未提交的事务里,会莫名其妙地看到第5条数据,这种现象称为幻读。

幻读和不可重复读很像,但幻读侧重点在于新增和删除,而不可重复读侧重点在于更改,共同之处都是一个事务中两次查询得到的数据结果不一致。

由此,从测试结果得出的结论是:

MongoDB采用的默认隔离级别是Snapshot一致性快照(特别是设置了readConcern=majority情况下,要读某行数据的历史版本时,依赖该隔离级别。)

Snapshot介于Repeatable Read与Serializable之间,既避免了脏读、不可重复读、幻读,又不会因Serializable串行化降低并发性能。

MySQL PK MongoDB:多文档事务支持,谁更友好?

参考文献

  • https://docs.mongodb.com/manual/core/transactions/
  • https://www.percona.com/blog/2018/12/04/mongodb-4-0-using-acid-multi-document-transactions/ 

【编辑推荐】

  1. dba+工具:MongoDB热备份工具,解决官方版备份缺陷
  2. 超实用的Oracle数据库自动备份脚本
  3. 阿里数据库的极致弹性之路
  4. 运维 | 美团数据库智能运维探索与实践
  5. MySQL自增id超大问题查询
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:拼字网 - 核心网)

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