Я не уверен, почему автоинкремент или последовательность неприемлемы. Вы хотите, чтобы внутренний идентификатор не был «догадан»? Что это такое, это номер учетной записи, и вы не хотите, чтобы кто-то мог угадать действительный номер учетной записи?
Ну, ладно, кроме уже упомянутых UUID, приходят на ум две очевидные возможности.
Используйте последовательность, а затем генерировать случайное число, и создать номер счета из комбинации двух с использованием алгоритма, таким образом, что две различные последовательности чисел, не может дать такой же конечное число. Например, простой алгоритм был бы: Возьмите следующий порядковый номер, умножьте на 12345678, сгенерируйте случайное число от 0 до 12345678-1 и добавьте два вместе.
Есть таблица в базе данных с одной записью, которая содержит последнее присвоенное число. Каждый раз, когда вам нужен новый номер, заблокируйте эту запись, используйте предыдущее значение, чтобы сгенерировать следующее значение, и обновите запись. Пока цифры всегда увеличиваются, у вас гарантированно не будет дубликатов.
Если у вас есть схема, которая использует идентификатор сервера как часть идентификатора, я призываю вас, чтобы не иметь, что идентификатор быть просто номер, сохраненный в файле конфигурации где-то. Я сейчас работаю над системой, где у кого-то была яркая идея дать каждому серверу «идентификатор сервера», который встроен для записи идентификаторов, а идентификатор сервера - это небольшое целое, которое назначено вручную. Это не слишком сложно в производстве, где есть только 3 сервера. Но в разработке и тестировании, когда новые серверы постоянно растут и опускаются, а тестовые файлы конфигурации постоянно подбрасываются, больно управлять. Я бы не использовал период id сервера, но если вы собираетесь использовать его, сделайте его автоматически назначенным каким-либо центральным сервером или выведите его из IP-адреса или что-то безопасное.
Укажите, что вы хотите решить с помощью своих уникальных идентификаторов. Является ли это системой управления контентом? –
Я не уверен, что еще вы просите ... Идентификатор должен быть уникальным для нескольких серверов J2EE для базы данных бэкэнд. Почему, хотя и важно, на самом деле это не вариант. Это больше, как мы это делаем, будь то система управления контентом, блог, онлайн-система автосервиса, система бронирования и т. Д. –