Поделиться через


Группирование нескольких операций в транзакциях в Azure Cosmos DB для виртуальных ядер MongoDB

Область применения: Виртуальные ядра MongoDB

Обычно требуется сгруппировать несколько операций в одну транзакцию для фиксации или отката. В принципах базы данных транзакции обычно реализуют четыре основных принципа ACID . ACID означает:

  • Атомарность: транзакции полностью или не полностью завершены.
  • Согласованность: базы данных переход с одного согласованного состояния на другое.
  • Изоляция: отдельные транзакции экранируются от одновременных.
  • Устойчивость: завершенные транзакции являются постоянными, обеспечивая согласованность данных даже во время сбоев системы.

Принципы ACID в управлении базами данных обеспечивают надежную обработку транзакций. Azure Cosmos DB для виртуальных ядер MongoDB реализует эти принципы, что позволяет создавать транзакции для нескольких операций.

Необходимые компоненты

Создание транзакции

Создайте новую транзакцию с помощью соответствующих методов на выбранном языке разработчика. Обычно эти методы включают в себя некоторый механизм упаковки для группировки нескольких транзакций и метода фиксации транзакции.

Примечание.

В примерах в этом разделе предполагается, что у вас есть переменная коллекции с именем 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();
    

Следующий шаг