Случайность лишь уменьшает вероятность совпадения. Уникальность обеспечивает атомарная проверка и вставка: синхронизированная структура в памяти или unique constraint в базе.
Как предотвращать коллизии идентификаторов в памяти и БД
Случайность лишь уменьшает вероятность совпадения. Уникальность обеспечивает атомарная проверка и вставка: синхронизированная структура в памяти или unique constraint в базе.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сервис генерирует короткий случайный ID. Несколько потоков или процессов могут получить одинаковый кандидат. Как обеспечить уникальность при хранении в памяти и в базе?
Ответ
Случайность лишь уменьшает вероятность совпадения. Уникальность обеспечивает атомарная проверка и вставка: синхронизированная структура в памяти или unique constraint в базе.
В одном процессе используйте защищённое критической секцией хранилище и повтор генерации при занятом ID. Проверка contains и отдельная запись без синхронизации создают гонку. Между процессами локальной блокировки недостаточно: база должна отвергать дубликат уникальным ограничением, после чего приложение ограниченно повторяет попытку. Ошибки других типов нельзя маскировать как коллизию.