Как поставщики баз данных реализуют транзакции?

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

  • уменьшить деньги на счете А
  • увеличить его на счет Б.

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

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

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

Ответ 1

Страница ACID - Реализации в wikipedia поможет вам начать запись на запись, теневой пейджинг и управление несколькими версиями concurrency. Следуйте ссылкам, чтобы найти больше.

Каждый поставщик СУБД реализует свои собственные алгоритмы, часто несколько разных в зависимости от контекста, полной ACID или ослабленных требований, распределенных требований к согласованности транзакций и т.д.