J'utilise Est-ce une hypothèse sûre? p> Par exemple, pour le moment je reçois ceci: P> system.currenttimemillis () code> (qui renvoie un
long code> entier) dans Java pour générer un identifiant unique pour les entités de base de données depuis que je suppose que ce n'est pas possible Pour ces moments se chevauchent à tout moment.
1296691225227
3 Réponses :
Il est assez improbable que vous obtenez un affrontement, oui (sauf si vous êtes dans un système à haute charge, auquel cas il est très em> probable), mais toujours possible. P>
Java a un mécanisme existant pour générer des identifiants uniques, bien que - Je suggère fortement d'utiliser cela à la place. P> java.util.uuid code>. Il a des méthodes pour générer des identifiants aléatoires. P>
En termes de probabilité d'échec, je doute que l'approche des millisecondes survivrait les tests unitaires.
@Dolph - ou test de charge système. Certes, cela ne devrait pas ... si vous les faites correctement.
J'aime beaucoup uuid mais c'est tout à fait inefficace (compris que le moyen difficile ...) Le moyen habituel de stocker est uuid.tostring () qui est terrible 36bytes longs (généralement cartographié à quelque chose comme Varchar (36)). Les index de DB doivent être conservés en mémoire - plus l'index est plus important, plus l'indexation nécessaire, d'indexer plus lentement, etc. Je vous conseillerais d'utiliser quelques bits de clustering haut bas et long code> ID.
@Bestssss: Pourriez-vous clarifier un peu le système avec des bits de regroupement que vous avez proposés?
Non, ce n'est pas sûr. Un milliseconde est longue dans les cycles du processeur (ils fonctionnent à des milliards de cycles par seconde, pas de milliers), donc si plusieurs demandes entrent à la fois ou si plusieurs threads essayent de créer des entrées de base de données, ils verront le même temps de la CPU et se retrouvera avec des clés en collision. Vous auriez également des problèmes si l'horloge système est de quelque manière que ce soit de réinitialiser ou de modifier en une fois plus tôt. P>
Il convient également de noter que, tandis que la granularité minimum i> de la minuterie milliseconde est théoriquement 1 ms, la granularité réelle peut être plus. J'ai utilisé des systèmes où il était 20 ms.
Sans parler de quelque chose comme NTP déplacer votre horloge en arrière.
Quelle est la granularité minimale? Comment puis-je vérifier la valeur de mon système?
Si votre code est jamais exécuté dans un environnement en cluster, il augmente les chances que vous avez des collisions d'identité. p>
La plupart des bases de données JPA ont des moyens de générer eux-mêmes des identifiants uniques. P>
http://fr.wikibooks.org/wiki/java_perssice/identity_and_Encing < / p>