In primo luogo, perché non stai usando un contatore? Di solito è tutto ciò di cui hai bisogno.
In secondo luogo, dovresti usare uuids anziché i timestamp. Hanno risolto questo problema, e non c'è davvero nessuna buona ragione per provare a risolverlo da solo, potenzialmente aprendo ai problemi.
In terzo luogo, il calcolo che dovresti fare è chiamato problema del compleanno. Il problema del compleanno originale si chiede quanto sia probabile che due persone in un gruppo condividano un compleanno. Dovrebbe essere chiaro che questo è più o meno lo stesso che chiedere quanto sia probabile che due timestamp siano generati allo stesso millisecondo (o qualunque granularità).
A quanto pare, hai solo bisogno di 23 persone per la probabilità che un compleanno condiviso superi il 50%. Questo è molto meno di quanto la maggior parte della gente si aspetti (quindi a volte viene chiamato il paradosso del compleanno). È anche il motivo per cui ci sono buone probabilità che le collisioni siano più probabili di quanto ti aspetti.
Puoi leggere come calcolarlo su Wikipedia o utilizzare il calcolatore online su WolfromAlpha :
Solo per fare un esempio, se generi 10 id al secondo con una granularità di millisecondi, la probabilità di una collisione è 1 su 23. In media, avrai una collisione ogni 23 secondi.
Ma è peggio di così. L'assunto in questa matematica è che ogni possibile compleanno è ugualmente probabile. Non è vero per i compleanni, più persone nascono in primavera. Inoltre non sarà vero per i tuoi timestamp. Stai per diventare molto più pesante in determinati momenti della giornata rispetto ad altri.
La cosa peggiore di tutte è che un improvviso aumento dell'utilizzo, con un conseguente notevole aumento delle probabilità di collisione, è esattamente il tempo in cui non vuoi che si verifichi un misterioso errore casuale.
Non utilizzare i timestamp. Non farlo. Usa uuids che sono stati progettati da persone intelligenti per evitare il problema di collisione.