Встречается на собеседованиях • сегодня
Как избегать коллизий при параллельной записи в БД
Используйте механизмы блокировок (locking) или оптимистичного контроля версий (optimistic concurrency control).
Блокировки:
python
with transaction.atomic(): # Django example
obj = Model.objects.select_for_update().get(id=1)
obj.value += 1
obj.save()select_for_update() блокирует строку до завершения транзакции.
Оптимистичный контроль:
python
obj = Model.objects.get(id=1)
old_version = obj.version
obj.value += 1
updated = Model.objects.filter(id=1, version=old_version).update(value=obj.value, version=old_version + 1)
if not updated:
raise ConcurrentModificationError()Проверя версию, избегаем перезаписи изменений.
Другие подходы:
- Используйте
F()выражения для атомарных операций:pythonModel.objects.filter(id=1).update(value=F('value') + 1) - Применяйте очереди (Celery, Kafka) для сериализации запросов.
Выбор зависит от нагрузки и требований к согласованности данных.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы