Вопрос проверяет понимание механизмов обеспечения целостности данных при конкурентном доступе к БД.
Гонка состояний (race condition) в контексте баз данных — это ситуация, когда результат выполнения нескольких параллельных операций зависит от порядка их выполнения. Это может привести к потере обновлений, чтению "грязных" данных или другим аномалиям. Например, два пользователя одновременно пытаются уменьшить остаток товара на складе: без синхронизации оба могут прочитать одно и то же значение и записать некорректный результат.
SELECT ... FOR UPDATE в PostgreSQL.version). При обновлении проверяется, что версия не изменилась. Если изменилась — транзакция откатывается и повторяется. Подходит для систем с низкой конкуренцией.-- Таблица с версией
CREATE TABLE products (
id INT PRIMARY KEY,
stock INT,
version INT DEFAULT 0
);
-- Обновление с проверкой версии
UPDATE products
SET stock = stock - 1, version = version + 1
WHERE id = 1 AND version = 5;
-- Если строк затронуто 0 — конфликт, нужно повторитьВыбор метода зависит от нагрузки и критичности данных. Для высоконагруженных систем с редкими конфликтами предпочтительна оптимистичная блокировка. Для операций с высокой вероятностью конфликтов (например, бронирование последнего места) — пессимистичная. Всегда используйте транзакции и тестируйте сценарии конкурентного доступа.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Python Developer в телеграм