在 Azure DocumentDB 中的事务中对多个操作进行分组

通常,希望将多个操作组合到单个事务中,以便一起提交或回滚。 在数据库原则中,事务通常实现四个关键 ACID 原则。 ACID 代表:

  • 原子性:事务要么完全完成,要么完全不完成。
  • 一致性:数据库从一个一致状态过渡到另一个状态。
  • 隔离:单个事务不受并发事务干扰。
  • 持久性:完成的事务是永久性的,确保数据保持一致,即使在系统故障期间也是如此。

数据库管理中的 ACID 原则可确保可靠地处理事务。 Azure DocumentDB 实现了这些原则,使您能够为多个操作创建事务。

先决条件

  • Azure 订阅服务

    • 如果没有 Azure 订阅,请创建 试用版
  • 现有的 Azure DocumentDB 群集

创建交易

使用所选开发人员语言中的相应方法创建新事务。 这些方法通常包括一些包装机制,用于将多个事务组合在一起,以及提交事务的方法。

注释

本部分中的示例假定你有一个名为 collection 的集合变量。

  1. 使用 startSession() 为事务操作创建客户端会话。

    const transactionSession = client.startSession();
    
  2. 创建一个事务使用withTransaction(),并将所有相关的事务操作放置于回调中。

    await transactionSession.withTransaction(async () => {
        await collection.insertOne({ name: "Coolarn shirt", price: 38.00 }, transactionSession);
        await collection.insertOne({ name: "Coolarn shirt button", price: 1.50 }, transactionSession);
    });
    
  3. 提交事务使用 commitTransaction()

    transactionSession.commitTransaction();
    
  4. 使用 endSession() 结束事务会话。

    transactionSession.endSession();
    

回滚事务

有时,可能需要在提交之前撤销操作。

  1. 使用现有事务会话,中止事务。abortTransaction()

    transactionSession.abortTransaction();
    
  2. 结束事务会话。

    transactionSession.endSession();
    

后续步骤