Резюме: Я разрабатываю постоянное веб-приложение Java, и мне нужно убедиться, что все оставшиеся ресурсы имеют глобально уникальные идентификаторы для предотвращения дублирования.Создание глобально уникального идентификатора в Java
Штраф печати:
- Я не использую РСУБД, поэтому у меня нет каких-либо фантазии генераторы последовательности (например, как один, предоставленной Oracle)
- я хотел он должен быть быстрым, желательно все в памяти - мне бы не пришлось открывать файл и увеличивать некоторое значение
- Он должен быть потокобезопасным (я ожидаю, что только один JVM за один раз должен будет генерировать ID)
- Должна быть согласованность между мгновенными JVM. Если сервер выключится и запустится, генератор ID не должен генерировать те же идентификаторы, которые он сгенерировал в предыдущих экземплярах (или, по крайней мере, шанс должен быть действительно, очень тонким - я ожидаю много миллионов ресурсов)
- Я видел примеры в уникальной статье шаблона EJB. Они не будут работать для меня (я бы предпочел не полагаться исключительно на System.currentTimeMillis(), потому что мы будем хранить несколько ресурсов за миллисекунду).
- Я рассмотрел ответы, предложенные в this question. Моя забота о них такова, какова вероятность того, что я получу дубликат ID с течением времени? Меня заинтриговало предложение использовать java.util.UUID для UUID, но опять же, вероятность дублирования должна быть бесконечно малой.
- Я использую JDK6
Вы используете несколько экземпляров приложения на разных машинах? Если да, можете ли вы запускать машины партиями - так что, вероятно, начнется несколько процессов в той же миллисекунде? Если злоумышленник находит способ вызвать конфликт UUID, это может поставить под угрозу безопасность вашего приложения? – 2012-03-17 16:09:09
(A) Какой объем идентификаторов будет сгенерирован? Как быстро? (Сколько раз в секунду/минуту) (B) Да, UUID были изобретены именно для вашей цели. – 2014-02-03 23:19:48