@Timrus161

Как лучше генерировать уникальный числовой номер?

Есть некий номер продукта, он должен быть уникальным
нужно генерировать этот номер. как генерировать - свобода, хоть по правилам, хоть рандом
например
создали первый:
Префикс-1323789634
второй:
Префикс-7689465476
третий:
Префикс-5478639379
важно, чтобы это было не просто один за другим, а неким рандомом или правилом.
и чтобы в один прекрасный момент не получилось эксепшена, что такой уже есть в базе

- думал через сиквенс в базе, но вне ордера есть только у oracle, не подходит. или можно как-то делать генерацию сиквенса рандомом?
- делать рандом в коде, а затем проверять есть ли такое уже в базе тоже не очень нравится
- была идея закладывать как-то ид_аккаунта-ещё_ид_чего_нибудь, но эти данные, боюсь, будут расти сильно
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
В подавляющем большинстве случаев в качестве уникального идентификатора можно взять время в милли/наномилли/микро/наносекундах System.currentTimeMillis() или System.nanoTime(). Можно объединить это время с идентификатором потока (чтобы исключить коллизии при использовании многопоточности) или даже идентификатором сервера если используется несколько серверов (кстати в этом случае даже не обязательно синхронизировать время на машинах).

p.s. сиквенсы есть и в postgres, так же ничто не мешает их реализовать на основе записей в таблице, так же практически все базы без сиквенсов поддерживают autoincrement, соответственно реализуете сиквенс на их основе, удаляя меньшее значение после получения нового.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы