Ich muss eine eindeutige 10-stellige ID in Java generieren. Dies sind die Einschränkungen für diese ID:Java: Eindeutige 10-stellige ID
- nur numerische
- maximal 10 Ziffern
- möglich schaffen bis zu 10 verschiedene IDs pro Sekunde
- muss eindeutig sein (auch wenn die Anwendung Neustarts)
- nicht möglich, eine Nummer in der Datenbank
- so schnell wie möglich speichern nicht viel lattency an dem System
Die beste Lösung, die ich bisher gefunden ist folgende:
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;
}
Diese Lösung hat die folgenden Probleme:
- Wenn aus irgendeinem Grund gibt es einen Bedarf von mehr als 10 IDs pro seccond zu erstellen ist , diese Lösung wird nicht funktionieren.
- In etwa 32 Jahren werden diese ID wiederholt werden kann (Dies ist wahrscheinlich akzeptabel)
Jede andere Lösung, um diese ID zu erstellen?
Irgendein anderes Problem, an das ich bei meinem nicht gedacht habe?
Danke für Ihre Hilfe,
Können mehrere Instanzen der Anwendung gleichzeitig ausgeführt werden? – assylias
Momentan läuft nur eine Instanz, ist aber möglicherweise in Zukunft möglich. Wir haben auch eine Sekundärinstanz für den Fall, dass die Primärseite ausfällt, aber nur eine von ihnen (primär oder sekundär) gleichzeitig ausgeführt wird. – magodiez
Wie in einigen der folgenden Antworten gezeigt, wird meine Implementierung in Umgebungen mit mehreren Instanzen oder mehreren Threads fehlschlagen. Nehmen wir an, dass eine einzelne Instanz mit einem einzigen Thread ausgeführt wird. – magodiez