Ho bisogno di generare un ID univoco di 10 cifre in Java. Queste sono le restrizioni per questo ID:Java: ID univoco di 10 cifre
- Solo numerici
- massima di 10 cifre
- possibile creare fino a 10 diversi ID al secondo
- deve essere unico (anche se l'applicazione riparte)
- Non è possibile salvare un numero nel database
- il più veloce possibile non aggiungere molto lattency al sistema
La soluzione migliore che ho trovato finora è la seguente:
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;
}
Questa soluzione presenta i seguenti problemi:
- Se per qualsiasi motivo non v'è la necessità di creare più di 10 ID per seccond questa soluzione non funzionerà
- In circa 32 anni questo ID potrebbe essere ripetuto (questo è probabilmente accettabile)
Qualsiasi altra soluzione per creare questo ID?
Qualsiasi altro problema non ho pensato con il mio?
Grazie per il vostro aiuto,
È possibile eseguire contemporaneamente più istanze dell'applicazione? – assylias
Al momento è in esecuzione una sola istanza, ma potrebbe essere possibile in futuro. Abbiamo anche un'istanza secondaria nel caso in cui il primario vada giù, ma solo uno di essi (primario o secondario) verrebbe eseguito nello stesso momento. – magodiez
Come indicato in alcune delle risposte seguenti, la mia implementazione fallirà in ambiente multi-istanza o multi-threading, quindi supponiamo che una singola istanza con un singolo thread sarà in esecuzione. – magodiez