Предположим, у вас есть два идентификатора клиента, которые отличаются на 100, и оба они делают заказ с интервалом в 100 единиц времени. Ваша уникальность только что вышла в окно.
Вы говорите, что собираетесь проверить уникальность базы данных; Вы не говорите, что собираетесь делать, если произошло столкновение. Вы также не говорите, что собираетесь делать с условиями гонки; Предположим, что два идентификатора порядка столкновения созданы одновременно, и ни один не находится в базе данных. Вы спрашиваете базу данных в двух разных потоках, является ли элемент уникальным; это. Затем вы вводите оба, и уникальность была нарушена, даже если проверка была выполнена.
Это действительно очень плохой способ получить уникальность. Что было бы лучше, это переместить это в слой базы данных. Вы можете поддерживать глобальный потокобезопасный счетчик заказов и назначать каждому новому заказу следующий наивысший номер заказа.
Между прочим, в течение многих лет я задавал вариант этого вопроса в качестве вопроса технического интервью. Я заметил сильную корреляцию между набором людей, которые пытаются использовать время как источник уникальности, и набором людей, которых не нанимают. Время - ужасный источник уникальности; одновременно может произойти много разных вещей.
Что еще хуже, это использование случайных чисел. Случайные числа являются еще худшим источником уникальности, чем метки времени. Предположим, у вас есть действительно случайный генератор чисел, который генерирует случайные 32-битные целые числа для идентификаторов заказа. Сколько заказов вам нужно иметь до того, как шансы станут лучше чем пятьдесят на пятьдесят, чтобы вы сгенерировали два заказа с одинаковым идентификатором? Ответ удивляет многих: всего около 77 тысяч, прежде чем есть 50% -ная вероятность, что вы сгенерировали два заказа с одинаковым номером (и только 9300, пока нет вероятности 1%).
Помните: что вы ищете - это гарантия уникальности. Не вероятная уникальность, а железная гарантия того, что один номер заказа относится именно к одному заказу. Если это то, что вам нужно, убедитесь, что вы реализуете это.