MongoDB 4.0 事务实现解析

云数据库 MongoDB 版

MongoDB 4.0 事务实现解析_第1张图片

基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。

了解更多

上个月底 MongoDB Wolrd 宣布发布 MongoDB 4.0, 支持复制集多文档事务,阿里云数据库团队研发工程师第一时间对事务功能的时间进行了源码分析,解析事务实现机制。

MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用mongo shell进行事务操作

> s = db.getMongo().startSession()

session { "id" : UUID("3bf55e90-5e88-44aa-a59e-a30f777f1d89") }

> s.startTransaction()

> db.coll01.insert({x: 1, y: 1})

WriteResult({ "nInserted" : 1 })

> db.coll02.insert({x: 1, y: 1})

WriteResult({ "nInserted" : 1 })

> s.commitTransaction()  (或者 s.abortTransaction()回滚事务)

支持 MongoDB 4.0 的其他语言 Driver 也封装了事务相关接口,用户需要创建一个Session,然后在Session上开启事务,提交事务。例如

python 版本

with client.start_session() as s:

    s.start_transaction()

    collection_one.insert_one(doc_one, session=s)

    collection_two.insert_one(doc_two, session=s)

    s.commit_transaction()

java 版本

try (ClientSession clientSession = client.startSession()) {

  clientSession.startTransaction();

  collection.insertOne(clientSession, docOne);

  collection.insertOne(clientSession, docTwo);

  clientSession.commitTransaction();

}

Session

Session是 MongoDB 3.6 版本引入的概念,引入这个特性主要就是为实现多文档事务做准备。Session本质上就是一个「上下文」。


>>>阅读全文

你可能感兴趣的:(MongoDB 4.0 事务实现解析)