ACID: Управление конкурентностью с помощью транзакций
Запросы к базе данных выполняются линейно, один за другим. Когда к базе данных обращаются многие пользователи или у одного пользователя есть связанный набор запросов для выполнения, становится важным гарантировать, что результаты остаются согласованными. Для этого используются транзакции, которые представляют собой группы запросов к базе данных, обрабатываемых как единое целое. Другими словами, это логические единицы работы.
Для обеспечения целостности данных транзакции должны соответствовать четырём условиям: атомарности, согласованности, изоляции и устойчивости (ACID).
Атомарность
Атомарность означает, что вся транзакция должна быть завершена. Если это не так, вся транзакция прерывается. Это гарантирует, что база данных никогда не останется с частично завершёнными транзакциями, что приводит к плохой целостности данных. Если, например, вы снимаете деньги с одного банковского счета, но второй запрос терпит неудачу, и система не может перевести деньги на другой счет, оба запроса должны завершиться неудачей. Деньги нельзя просто потерять или взять с одного счета, не переведя на другой.
Согласованность
Согласованность относится к состоянию данных при выполнении определённых условий. Например, одним правилом может быть то, что каждый счёт должен относиться к клиенту в таблице клиентов. Эти правила могут нарушаться в ходе транзакции, если, например, счёт вставляется без связанного клиента, который добавляется на более позднем этапе транзакции. Эти временные нарушения не видны за пределами транзакции и всегда будут устранены к моменту завершения транзакции.
Изоляция
Изоляция означает, что любые данные, используемые во время обработки одной транзакции, не могут быть использованы другой транзакцией до завершения первой транзакции. Например, если двое людей вносят по 100$ на другой счёт с балансом 900$, первая транзакция должна добавить 100$ к 900$, а вторая — добавить 100$ к 1000$. Если вторая транзакция прочитает 900$ до завершения первой транзакции, обе транзакции покажутся успешными, но 100$ будут утеряны. Вторая транзакция должна дождаться, пока она одна будет иметь доступ к данным.
Устойчивость
Устойчивость означает, что после подтверждения данных транзакции их последствия сохранятся даже после сбоя системы. Пока транзакция активна, её последствия не сохраняются. Если база данных откажется, резервные копии всегда восстановят её до согласованного состояния до начала транзакции. Ничто, что делает транзакция, не должно изменить этот факт.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/acid-concurrency-control-with-transactions/