HeadlinesBriefing favicon HeadlinesBriefing.com

Как базы данных обрабатывают контроль конкурентного доступа

ByteByteGo •
×

Представьте банковский счет с балансом 100 долларов. Два запроса на снятие по 10 долларов приходят одновременно. Оба успешно завершаются без ошибок, но итоговый баланс оказывается 90 долларов вместо правильных 80 долларов. Каждая транзакция прочитала правильный баланс и правильно рассчитала, но их перекрытие привело к повреждению данных. Этот сценарий иллюстрирует фундаментальную проблему: перекрывающиеся транзакции — нормальная рабочая条件 баз данных, а не редкие исключения. В любой момент несколько процессов пишут в одни и те же записи, и столкновения в пределах миллисекунд создают эти баги.

Статья рассматривает, как данные повреждаются через четыре различных паттерна конфликта. Затем она рассматривает две основные стратегии решения: Пессимистическая блокировка, которая блокирует доступ заранее, и Оптимистическая блокировка, которая позволяет транзакциям proceeds and checks for conflicts afterward. Finally, it covers how databases evolved to stop readers and writers from waiting on each other, and how isolation levels let developers pick the right level of data protection. The piece concludes with the innovation that made the strictest safety settings practical for production use.