Я пытаюсь узнать больше о транзакциях с базами данных, я нашел правило ACID для написания транзакций и подумал о нескольких вопросах.
Правило ACID:
Транзакция должна быть:
- Atomic - это одна единица работы и не зависит от предыдущих и нижеследующий сделка.
- Согласовано - данные передаются или откат, нет "промежуточный" случай, когда что-то имеет был обновлен, а что-то не имеет.
- Изолирован - транзакция не видит промежуточные результаты текущего сделка.
- Durable - значения сохраняются, если данные были выполнены, даже если система сразу же сработает.
Мне было интересно, как они работают под капотом, поэтому я могу лучше понять факторы, которые необходимо учитывать при написании такой транзакции. Я предполагаю, что конкретные детали будут различаться между доступными реализациями баз данных, но некоторые правила всегда будут на месте.
- Как база данных обрабатывает параллельные транзакции, сохраняя при этом еще одно правило Atomic?
- Есть ли очередь транзакций, обрабатываемых в порядке?
- Как длительная транзакция, которая поддерживает все остальные, обрабатывается?
- Являются ли обновления для таблиц, выполненных в памяти, поэтому, если произошел сбой перед фиксацией, никаких изменений в базе данных нет?
- Или есть некоторые промежуточные таблицы, которые обновляются, чтобы выжить в результате такого сбоя?
- Пока выполняется транзакция, запрещен ли доступ для чтения и записи к затронутым таблицам?
- Или может ли база данных разрешить запись, но транзакция будет перезаписывать все изменения при фиксации?
Спасибо