MongoDB 宣布即将支持 ACID 事务

  • 薛命灯

2018 年 2 月 16 日

话题:数据库语言 & 开发架构

2 月 16 日,大年初一,MongoDB 联合创始人以及 CTO Eliot Horowitz 在其官方博客上宣布 MongoDB 即将在 4.0 版本中支持跨文档事务,也就是说,MongoDB 即将成为唯一一款同时具备速度、灵活性和支持 ACID 事务特性的文档数据库。

MongoDB 的事务机制通过快照隔离提供了全局的数据一致性视图,并强制执行所有操作或不执行任何操作来实现数据完整性。

MongoDB 的事务与开发者所熟悉的关系型数据库的事务类似,它们具有相似的语法,比如完成一个事务需要多个语句(如 start_transaction 和 commit_transaction),这样给开发者带来的开发体验与之前是相似的。

MongoDB 加入跨文档事务支持并不会对不需要事务的操作造成任何性能上的影响。MongoDB 4.0 将于今年夏天发布,支持跨单个副本集的事务,而 MongoDB 4.2 将支持跨整个集群的事务。

文档模型将原先在关系型数据库中需要通过父子表来表示的相关数据组合在同一篇文档中,MongoDB 的单文档原子操作已经为大部分应用提供了事务语义。

而跨文档事务为开发者提供了更多的选择,他们因此可以更容易地解决更多问题,省掉了很多麻烦。开发人员完全可以信赖 MongoDB 4.0 的事务机制,从而更自由地进行数据建模。

即将到来的事务特性经过了多年的开发,最早是从 3 年前集成 WiredTiger 存储引擎开始的。这几年,MongoDB 几乎对服务器的每个部分都进行了深入改造,从存储层到副本共识协议,再到分片架构。

现在它已经可以提供良好的一致性和持久性保证,并引入了全局逻辑锁,重构了集群元数据管理机制等等。同时,MongoDB 还将这些增强特性通过 API 的方式暴露出来,客户端驱动器也可以使用这些 API。目前官方已经完成了 85% 与事务特性相关的工作,具体如下图所示:

要想深入了解跨文档事务特性,可以参考官方说明。如果读者已经迫不及待要体验事务特性,可以加入 MongoDB 的 beta 计划,更多细节可参官方文档

数据库语言 & 开发架构