Группирование нескольких операций в транзакции

Завершено

Если изменение одной части данных должно приводить к изменению в другой части данных, приложениям часто нужно группировать последовательности обновления данных. Можно использовать транзакции для группирования этих обновлений. Механизм транзакций позволяет отменить (откатить) всю последовательность обновлений в случае сбоя любого отдельного события.

Примером является интернет-магазин, использующий транзакцию для размещения заказа, проверки оплаты и обновления инвентаризации продуктов. Группирование связанных событий гарантирует, что изменения запасов товара не будут происходить, пока не будет получена форма с подтверждением оплаты.

Далее вы узнаете, что такое транзакции и когда они используются для работы с данными.

Что такое транзакция?

Транзакция — это логическая группа операций базы данных, которые выполняются вместе.

Этот вопрос вам нужно задать себе при оценке необходимости использовать транзакции в приложении: будет ли изменение одного блока данных в наборе влиять на другие блоки данных? Если это так, ваша служба базы данных должна поддерживать транзакции.

Транзакции часто определяются набором четырех требований, вызывающих гарантии ACID. Сокращение ACID обозначает Atomicity (атомарность), Consistency(согласованность), Isolation (изоляция) и Durability(устойчивость).

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

Если для базы данных применяются гарантии ACID, эти принципы согласованно применяются к любой транзакции.

OLTP или OLAP

Базы данных транзакций часто называются системами обработки транзакций (OLTP). Системы OLTP часто поддерживают большое количество пользователей, имеют небольшое время отклика и обрабатывают большие объемы данных. Они также имеют высокий уровень доступности, то есть, минимальное время простоя. Системы OLTP обычно обрабатывают небольшие или относительно простые транзакции.

Примером службы Azure, поддерживающей OLTP, является База данных SQL Azure.

OLAP-системы (Online Analytical Processing — сетевая аналитическая обработка) обычно поддерживают меньшее число пользователей, характеризуются более длительным откликом и более низким уровнем доступности, а также обычно обрабатывают большие и сложные транзакции.

Примером службы Azure, поддерживающей OLAP, является Azure Analysis Services.

Концепции OLTP и OLAP сейчас применяются не так часто, как раньше, но их понимание упростит категоризацию потребностей вашего приложения.

Транзакции: оценка типов данных

Обеспечить правильное состояние данных не всегда просто. Транзакции часто помогают соблюсти установленные требования к целостности данных. Если для ваших данных может быть полезно применение принципов ACID, следует выбрать для хранилища решение с поддержкой транзакций.

Давайте рассмотрим каждый из наборов данных, применяемых в интернет-магазинах, и оценим для них потребности в транзакциях.

Каталог продукции

Данные каталога продукции должны храниться в транзакционной базе данных. Данные о наличии товара на складе должны обновляться, когда пользователь размещает заказ и подтверждает оплату. Если же кредитная карта клиента будет отклонена, нужно откатить весь заказ и не обновлять данные о запасах. Такие связи требуют применения транзакций.

Фотографии и видео

Фото и видео в каталогах продукции не требуют поддержки транзакций. Эти файлы изменяются, только при обновлении или добавлении новых файлов. Между изображением и данными о товарах существует связь, но ее характер не является транзакционным.

Данные о бизнесе

Так как бизнес-данные здесь являются историческими и не изменяются при обработке, поддержка транзакций не требуется. Бизнес-аналитики, работающие с данными, также имеют уникальные потребности в отношении запросов. Они зачастую работают с агрегированными данными в своих запросах, поэтому они могут работать с итогами или иными точками данных меньшего размера.

Проверьте свои знания

1.

Какой тип системы транзакционной базы данных лучше всего подходит для данных продукта?

2.

Предположим, что операции розничной компании по обновлению запасов и обработке платежей входят в одну и ту же транзакцию. Пользователь пытается применить к заказу кредит в 30 долл. США на своем ноутбуке и отправляет с телефона тот же самый заказ, используя кредит магазина (на полную сумму). Система получит два одинаковых заказа. При этом используется ACID-совместимая база данных. Что произойдет?