瞬间爆炸-MongoDB4.0将支持多文档事务

瞬间爆炸-MongoDB4.0将支持多文档事务

背景

Part1:写在最前

在早期,我们说的MongoDB支持事务是指针对MongoDB的单文档级别,与我们MySQL等关系型数据库中的事务是不同的,那什么是单文档事务呢?

>db.username.update({'name': 'helei'}, {$set: {'age': 26, 'score': 85}})

上述命令对username集合中,name为helei列的行进行更新,如果age更新为26,score由于宕机或其他原因导致更新失败,那么MongoDB则会回滚这一操作。

Part2:单文档ACID实现

MongoDB在更新单个文档时,会对该文档加锁,而要理解MongoDB的锁机制,需要先了解以下几个概念:

1.Intent Lock, 意图锁表明读写方(reader-writer)意图针对更细粒度的资源进行读取或写入操作。例如:如果当某个集合被加了意向锁,那么说明读、写方意图针对该集合中的某个文档进行读或写的操作。

2.MGL多粒度锁机制(Multiple granularity locking ),有S锁(Shared lock), IS锁(Intent Share lock), X锁(Exclusive lock),IX锁(Intent Exclusive lock)

在Part1中的例子里,MongoDB会为name为helei的文档加上X锁,同时为包含该文档的集合,数据库和实例都加上意向写锁(IX),这时,针对该文档的操作就保证了原子性。

MongoDB4.0中的多文档事务

Part1:多文档事务

MongoDB 4.0将增加对多文档事务的支持,通过snapshot隔离,事务提供全局一致的数据结果,并且执行要么全部成功,要么全部失败来保证数据完整性。

MongoDB4.0中的事务对于开发人员来讲将会和普通的关系型数据库一样方便,例如start_transaction和commit_transaction。启用多文档事务的MongoDB也不会影响机器的负载。在今年夏天发布的MongoDB 4.0中,事务将率先在副本集上提供支持,而sharding架构中多文档事务也将在MongoDB4.2版本中实现。

在早期的MongoDB版本中,仅支持单文档事务,如果想使用多文档事务,需要依赖特别的数据建模才能够保证。而在MongoDB 4.0中,无论您如何为数据建模,都能够支持多文档事务。

下图展示了,在各个版本中新支持的核心特性:

Part2:Python

在Python中如何开启一个事务

with client.start_session() as s:
    s.start_transaction()
    try:
        collection.insert_one(doc1, session=s)
        collection.insert_one(doc2, session=s)
        s.commit_transaction()
    except Exception:
        s.abort_transaction()

Part3:Java

在Java中如何开启一个事务

try (ClientSession clientSession = client.startSession()) {
   clientSession.startTransaction();
   try {
       collection.insertOne(clientSession, docOne);
       collection.insertOne(clientSession, docTwo);
       clientSession.commitTransaction();
   } catch (Exception e) {
       clientSession.abortTransaction();
   }
}

——总结——

通过本文,我们了解到MongoDB4.0中最具颠覆性的特性--多行文档事务的支持,以及开发语言中如何开启一个事务。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。喜欢笔者的文章,右上角点一波关注,谢谢~

原文地址:http://blog.51cto.com/suifu/2091084

时间: 2024-09-30 10:50:56

瞬间爆炸-MongoDB4.0将支持多文档事务的相关文章

让你的linux支持chm文档的阅读

对于程序员来说经常要查看一些Reference帮助文档,可是面对一些旧文档,以及在没有网络的状况下,如何让你的linux支持chm文档的阅读,那么看下文吧! 方法一: 简单方法,在你的Firefox火狐上安装扩展(Add-on),搜索有一个chmreader,选择安装,重启firefox浏览器即可. 要看*.chm只需在终端执行: firefox *.chm & 优点:安装简单,看纯英文文档毫无压力: 缺点:兼容性较差,部分很多中文不支持,如下图我的c语言函数参考手册.chm只能部分显示中文:

支持Word文档和其他文件格式间的转换的控件Spire.Doc for .NET

Spire.Doc for .NET是e-iceblue公司推出的一款专门对Microsoft Word 文档进行操作的.NET类控件.这款控件的主要功能在于帮助开发人员轻松快捷地生成.编辑和查看Word文档.同时,开发人员还可以通过使用Spire.Doc for .NET 设置Word文档的格式,插入图片,表格,超链接等.Spire.Doc for .NET 最大的便利之处在于它不依赖于Microsoft Word以及任何其他第三方软件.只需将此款控件安装在您的电脑上,您就可以对word文档进

IIS6(Win2003) 使用.net 4.0 后,默认文档失效解决方案。

IIS6(Win2003) 使用.net framework 4.0 后,默认文档失效解决方案. 用.net framework 4.0 开发的WEB项目,但放到iis6 中无法使用默认文档,状况如下:地址栏输入:http://xxx.xxx.xxx.xxx/    提示找不到文件输入全称:http://xxx.xxx.xxx.xxx/default.aspx 正常显示. 本人解决方案如下. 1. 先新建一个文本文件,然后把以下文本COPY到这个文件中,保存为 1.reg ,然后直接导入.Win

centos6.5编译安装zabbix3.0和中文支持整理文档

编者按: 最近公司部分业务迁移机房,为了更方便的监控管理主机资源,决定上线zabbix监控平台.运维人员使用2.4版本的进行部署,个人在业余时间尝鲜,使用zabbix3.0进行部署,整理文档如下,仅供参考! 1. LNMP基础环境搭建: nginx-1.9.11环境编译安装:参考 http://www.cnblogs.com/songqingbo/articles/5355025.html location / { root html; index index.php index.html in

Oracle 11.2.0.4 PSU实施文档

1. 本次服务详细过程 1.1 背景概述 升级数据库PUS,数据库环境,操作系统版本:RedHat5.8 x64,数据库版本Oracle 11.2.0.4 x64 RAC Grid: 11.2.0.4,Oracle database: 11.2.0.4 1.2 安装前准备 -rw-r--r-- 1 oracle oinstall  93376160 Mar 25 11:43 p21948347_112040_Linux-x86-64.zip -rw-r--r-- 1 oracle oinstal

_00024 尼娜抹微笑伊拉克_云计算ClouderaManager以及CHD5.1.0群集部署安装文档V1.0

笔者博文:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_00024 妳那伊抹微笑_云计算之ClouderaManager以及CHD5.1.0集群部署安装文档V1.0 个性签名:世界上最遥远的距离不是天涯,也不是海角.而是我站在妳的面前.妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahou

IIS6(Win2003) 使用.net framework 4.0 后,默认文档失效解决方案。

用.net framework 4.0 开发的WEB项目,但放到iis6 中无法使用默认文档,状况如下: 地址栏输入:http://xxx.xxx.xxx.xxx/    提示找不到文件 输入全称:http://xxx.xxx.xxx.xxx/default.aspx 正常显示. 在百度查了一下,没有收获,不得以用非常手段,到Google 搜索 iis6 .net 4.0 document]这个关键字,立即有收获. 是HTTP解释.axd 时出错,导致默认文档没法生效. 解决方法: 先新建一个文

桌面支持--excel文档只读模式--有密码才能编辑

excel文档只读模式--有密码才能编辑

桌面支持--word文档图片显示乱码1

word文档图片显示乱码1