MongoDB 因其灵活的文档模型、可扩展分布式设计广受开发者喜爱,在此基础上,MongoDB 4.0 推出了更强大的功能支持,目前4.0第一个RC版本已经发布,本文将介绍 MongoDB 4.0 核心的一些新特性。
结合 MongoDB 文档模型内嵌数组、文档的支持,目前的单文档事务能满足绝大部分开发者的需求。为了让 MongoDB 能适应更多的应用场景,让开发变得更简单,MongoDB 4.0 将支持复制集内部跨一或多个集合的多文档事务,保证针对多个文档的更新的原子性。而在未来的 MongoDB 4.2 版本,还会支持分片集群的分布式事务。
MongoDB 的事务接口非常简单,开发者只需要将「需要保证原子性的更新序列」放到一个 session 的 开始事务
与提交事务
之间即可。
如下是 Python API 使用事务的例子
with client.start_session() as s:
s.start_transaction():
try:
collection.insert_one(doc1, session=s)
collection.insert_one(doc2, session=s)
except:
s.abort_transaction()
raise
s.commit_transaction()
如下是 Java API 使用事务的例子
try (ClientSession clientSession = client.startSession()) {
clientSession.startTransaction();
try {
collection.insertOne(clientSession, docOne);
collection.insertOne(clientSession, docTwo);
clientSession.commitTransaction();
} catch (Exception e) {
clientSession.abortTransaction();
}
}
事务是 MongoDB 开发团队经过3年多努力的结果,从3.0版本引入 WiredTiger 、到3.2版本支持 ReadConcern、3.6 支持 Causal Consistency 等很多工作都是在为事务功能做准备,最终在4.0版本将整个事务的API提供给用户,帮助用户更好的构建应用。