您的当前位置:首页正文

MongoDB - 事务

来源:华拓网

MongoDB已经更新到4.0版本,支持ACID及多文档事务。

在MongoDB中,单个文档的操作是原子的。在实际案例中,我们可以在单个文档中使用内嵌文档及数组,而不是在多个集合和文档中存储数据,这样可以省去了多文档事务的麻烦。

不管怎样,对于要求多文档更新原子性、读取一致性的情形,MongoDB提供了针对副本集执行多文档事务的能力。多文档事务可以跨多个操作、集合、数据库和文档使用。多文档事务中的操作,要么全部执行,要么全部不执行。事务提交后,其中的所有数据更改都会保存下来。如果任何操作失败,事务终止,事务中的数据变更会丢弃并且不再可见。在事务提交之前,事务外对事务中的写入操作不可见。

大多数情况下,多文档事务比单文档写入需要更多的性能开销,并且多文档事务不应该取代有效的数据结构设计(也就是说建议优先考虑合理的设计,而不是依赖多文档事务)。对于许多场景,非规范化的数据模型(内嵌文档和数组)对于我们的数据和用例还是最佳方案,适当的数据模型将减少对多文档事务的需求。

目前多文档事务只支持副本集,分片集群的事务支持计划在4.2版本实现。

多文档事务仅适用使用WiredTiger存储引擎的部署。

For transactions:

  • You can specify read/write (CRUD) operations on existing collections. The collections can be in different databases.

  • You cannot read/write to collections in the config, admin, or local databases.

  • You cannot write to system.* collections.

  • You cannot return the supported operation’s query plan (i.e. explain).

The following mongo shell methods are available for transactions: