Как базы данных SQL предотвращают повреждение, когда два или три подключения к ней одновременно изменяют одну и ту же таблицу (или даже одну и ту же строку)?
Я думал о теоретической возможности, которая может возникнуть в базах данных, которые имеют несколько интерфейсов с балансировкой нагрузки на основе серверов:
- Сервер 1 обращается к центральной базе данных
- Сервер 2 обращается к центральной базе данных
- Сервер 1 получает информацию для пользователя X в центральной базе данных
- Сервер 2 получает информацию для того же пользователя X в центральной базе данных
- Сервер 1 устанавливает новые данные для пользователя X в центральной базе данных после выполнения некоторой работы (может быть транзакция с выполнением или без)
- Сервер 2 устанавливает новые данные для пользователя X в центральной базе данных.
Какой на данный момент пользователь X будет содержать недопустимые записи, поскольку он в основном перезаписал работу, которую Сервер 1 только что сделал для того же пользователя.
Я думал о постоянной проверке одной и той же таблицы и строки, чтобы увидеть, были ли они изменены в последнее время, но все же ничто не мешает той же самой таблице и строке быть измененной чем-то еще между временем, когда она проверяется, и временем, когда она будет записываться в БД после проверка.
Я просто пытаюсь понять, как работают большие базы данных с миллионами пользователей и как они распределены по десяткам или сотням отдельных серверов.