Générer un identifiant unique
J'ai besoin de générer des ID unique pour mon application. Lorsque j'ai utilisé (UUID.randomUUID()).toString()
j'obtiens un code (pensant que ce sera unique), ce qui est très long.
Je ne suis pas sûr de la façon unique qu'il sera, quand nous générer des codes à l'aide de Java ou d'Horodatage randomstring.
J'ai besoin de générer des codes uniques qui n'est que de de 8 à 10 caractères (alpha-numérique). Comment obtenir de la sorte?
Je suis en utilisant la base de données MySQL.
Est la génération de code unique sur le côté de la base de données est la meilleure façon ou peut-on générer un tel court (mais unique) codes en Java?
Des suggestions avec des exemples de code vous sera très utile.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
- Je utiliser
RandomStringUtils.randomAlphanumeric()
méthode decommons-lang
de réaliser ceci:Si vous utilisez Maven, vérifiez que vous avez ajouté
commons-lang
de projet dépendances:C'est à vous et à votre projet. Est l'id de la génération de la partie de la logique métier? Si oui, et en toute logique, écrit en Java, donc l'écrire sur Java. Si une partie ou la totalité de la logique déléguée à la base de données, afin de générer de code (mais dans ce cas, vous avez une forte dépendance à la base de données en particulier).
Avez-vous de la limitation spécifique que vous devez prendre en compte? Comme la croix-application unique? Parce que sinon, MySQL est tout à fait capable de générer des Id par lui-même, tout ce que vous devez faire est de définir un
auto-incrémentation
colonne et de ne pas le spécifier à l'heure d'insertion (sens, l'insertion d'unNULL
de la valeur pour elle) qui vous permettront de MySQL de le remplir avec le prochain ID unique et ne nécessitant aucun travail de votre part.Il ne sera pas une chaîne alphanumérique (dont je ne suis pas sûr si vous avez spécifié comme une exigence ou restriction), mais si tout ce que vous avez besoin est l'unicité, il est plus que suffisant. 8 - 10 caractères alphanumériques ne sont pas suffisants pour garantir l'unicité dans un générés aléatoirement chaîne, de sorte que vous auriez à effectuer une insertion vérifier sur la base de données.
Bases de données sont conçues pour être en mesure de générer des Identifiants uniques en cas de besoin. Je doute de tout ce que vous (ou moi) pourraient code serait "mieux" variante de cette.
J'ai écrit un service simple qui peut générer des semi-unique non-séquentielle 64 bits des numéros longs. Il peut être déployé sur plusieurs machines pour la redondance et l'évolutivité. Il utilise ZeroMQ pour la messagerie. Pour plus d'informations sur la façon dont il fonctionne regarder github page: zUID
Prendre regardez: UIDGenerator.java
Vous pouvez le personnaliser (unique pour traiter uniquement, ou dans le monde), il est facile et rapide d'utilisation:
Vous pouvez changer la mise en œuvre afin de réduire la taille de la pièce d'identité (et d'ajouter d'autres compromis)
voir mes résultats de l'analyse comparative:
http://zoltran.com/roller/zoltran/entry/generating_a_unique_id
ou les exécuter vous-même.
La question de savoir si l'id de génération en partie être fait dans la base de données ou de java fin:
Cette question doit être répondue par vous selon les besoins de votre application:
1) Une façon est d'aller par le Système.currenTimeMillis() . Mais si votre applicaation va travailler dans un cluster env, alors vous pouvez vous retrouver avec des valeurs en double.
http://www2.sys-con.com/itsg/virtualcd/java/archives/0512/Westra/index.html
2) une Autre façon est d'utiliser l'UUID de la Génératrice .Il va vous aider dans le cas où vous avez différentes bases de données qui doivent être fusionnées. L'utilisation de ce mehtod vous n'avez pas à vous soucier de la duplication de code lors de la fusion des bases de données.
https://marketplace.informatica.com/solutions/mapping_uuid_using_java
Il peut y avoir d'autres facteurs que vous pouvez envisager.
Selon votre question, l'UUID de la méthode go.