MongoDB 中的事务处理详解

阅读时长 5 分钟读完

在 MongoDB 中进行事务处理可以在多个操作之间维护 ACID 事务特性,实现多文档事务操作。MongoDB 的事务处理采用多文档事务实现了单个事务跨越多个文档,多条记录的操作,这对于需要维护数据完整性的应用程序非常有用。本文将对 MongoDB 中的事务处理进行详细介绍,包括事务概念、使用规则、事务示例代码。

事务概念

事务是指一组可以执行的操作,这些操作被视为一个逻辑单元,如果其中一个操作失败,可能会撤销所有的操作,以确保数据库保持一致状态。MongoDB 中的事务处理基于多文档事务(MDT)的概念,支持事务操作跨文档、跨集合等操作。MongoDB 使用写入协议的方式实现事务,确保 ACID 特性的维护。

  • A:原子性(Atomicity),指事务通过单个、不可再分的操作单元来定义,完成所有操作或者不完成。
  • C:一致性(Consistency),指事务要么全部成功,要么全部失败,不会出现部分成功或部分失败的情况。
  • I:隔离性(Isolation),指多个事务并发执行时,每个事务对其他事务是隔离的。
  • D:持久性(Durability),指在事务成功后,所做的修改将保存在数据库中,并持久化在磁盘上。

使用规则

MongoDB 支持全局事务、集合事务和分片集群间的事务。在使用事务前,需要确保以下环境:

  1. MongoDB 版本必须高于 4.0。
  2. 每个 MongoDB节点必须启用副本集。
  3. MongoDB 副本集必须具有读写节点或仲裁节点,以实现主节点的选举。

开始事务

在 MongoDB 中开启一个事务可以通过 startSession 方法开始,如下所示:

在一个事务内,可以对多个文档集合进行操作,一旦事务开始,所有与事务相关的操作都应该在当前事务上下文中处理。

提交和回滚事务

完成所有的事务操作后,可以通过调用 commitTransactionabortTransaction 方法提交或回滚事务。如果在提交事务之前发生异常,可以通过调用 abortTransaction 方法回滚事务。

-- -------------------- ---- -------
----- ------- - -----------------------------
---------------------------

--- -
    ------ -------
    ----------------------------
- ------------ -
    ---------------------------
-

事务范围

MongoDB事务的范围在于支持多个集合和分片事务的跨集合操作。下面的示例说明了如何在跨集合事务中使用 mongodb 来维护事务的边界:

事务示例代码

以下示例共涉及到 3 个集合。在执行事务时会获取名称为 collection1collection2collection3 的集合。此示例涉及到插入、更新、删除文档的操作以及回滚,所有事务操作都必须在 currentSession 上下文中执行:

-- -------------------- ---- -------
----- ------- - -----------------------------

--- -
  -- ---------
  ---------------------------

  -- --------
  ----- ----------- - --------------------------------------------------
  ----- ----------- - --------------------------------------------------
  ----- ----------- - --------------------------------------------------

  -- ------- -
  ----- ----------------------- ---- -- ----- ----- ---

  -- ------- -
  ----- ----------------------- ---- - -- - ----- - ----- ------- - ---

  -- ------- -
  ----- ----------------------- ---- - ---

  -- --------
  ----- ----------------------------
- -------- -
  -- ---------
  ----- ---------------------------
  ----- --
- ------- -
  ---------------------
-

总结

MongoDB多文档事务可以跨集合、文档进行操作,支持 ACID 特性,可以满足对数据完整性要求比较高的应用场景。上文介绍了 MongoDB 事务的概念、使用规则和示例代码,通过学习可以更好地理解事务处理的概念,提升开发效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a9291b48841e98945718c0

纠错
反馈