Potrzebuję wygenerować unikalny 10-cyfrowy identyfikator w Javie. Są to ograniczenia dla tego ID:Java: Unikatowy 10-cyfrowy identyfikator
- Tylko numeryczne
- maksymalnie 10 cyfr
- Możliwość tworzenia do 10 różnych identyfikatorów na sekundę
- musi być unikalne (nawet jeśli aplikacja wznawia)
- Nie można zapisać numer w bazie danych
- jak najszybciej, aby nie dodawać dużo lattency do systemu
Najlepszym rozwiązaniem znalazłem tak daleko jest następujące:
private static int inc = 0;
private static long getId(){
long id = Long.parseLong(String.valueOf(System.currentTimeMillis())
.substring(1,10)
.concat(String.valueOf(inc)));
inc = (inc+1)%10;
return id;
}
To rozwiązanie ma następujące problemy:
- Jeśli z jakiegoś powodu nie ma potrzeby tworzenia więcej niż 10 identyfikatorów za seccond , to rozwiązanie nie zadziała.
- W około 32 lat identyfikator ten może się powtórzyć (Jest to prawdopodobnie dopuszczalne)
Inny sposób postępowania, aby utworzyć ten ID?
Jakieś inne problemy, o których nie myślałem z moimi?
Dzięki za pomoc,
Czy kilka wystąpień aplikacji działa jednocześnie? – assylias
Tylko jedna instancja działa teraz, ale może być możliwa w przyszłości. Mamy również drugą instancję na wypadek, gdyby podstawowy przestał działać, ale tylko jeden z nich (podstawowy lub drugi) działałby w tym samym czasie. – magodiez
Jak wskazano w niektórych z poniższych odpowiedzi, moja implementacja zakończy się niepowodzeniem w środowisku z wieloma instancjami lub wieloma wątkami, więc zakładamy, że uruchomiona zostanie pojedyncza instancja z pojedynczym wątkiem. – magodiez