Резюме: Я разрабатываю постоянное веб-приложение Java, и мне нужно убедиться, что все оставшиеся ресурсы имеют глобально уникальные идентификаторы для предотвращения дублирования.
Тонкая печать:
- Я не использую RDBMS, поэтому у меня нет генераторов воображаемой последовательности (например, Oracle)
- Мне бы хотелось, чтобы это было быстро, желательно все в памяти - мне бы не пришлось открывать файл и увеличивать значение
- Он должен быть потокобезопасным (я ожидаю, что только один JVM за один раз должен будет генерировать идентификаторы)
- Должна быть согласованность между экземплярами JVM. Если сервер выключится и запустится, генератор ID не должен повторно генерировать те же идентификаторы, которые он сгенерировал в предыдущих экземплярах (или, по крайней мере, шанс должен быть действительно, очень тонким - я ожидаю много миллионов ресурсов)
- Я видел примеры в EJB уникальной статье шаблона ID. Они не будут работать для меня (я бы предпочел не полагаться исключительно на System.currentTimeMillis(), потому что мы будем хранить несколько ресурсов за миллисекунду).
- Я рассмотрел ответы, предложенные в этом вопросе. Моя забота о них такова, какова вероятность того, что я получу дубликат ID с течением времени? Меня заинтриговало предложение использовать java.util.UUID для UUID, но опять же, вероятность дублирования должна быть бесконечно малой.
- Я использую JDK6