MongoDB - 事务

参考 https://docs.mongodb.com/manual/core/transactions/

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).

  • For cursors created outside of transactions, you cannot call getMore inside a transaction.

  • For cursors created in a transaction, you cannot call getMore outside the transaction.

多文档事务中不允许影响数据库目录的操作,如:创建、删除集合或索引。更多限制操作可以查看 受限操作.

The following mongo shell methods are available for transactions:

Spring Boot项目中关于MongoDB的事务支持 -> Spring Boot – 数据库操作之MongoDB

    原文作者:yuanzicheng
    原文地址: https://www.jianshu.com/p/a43afcab2645
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞