Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql UUID_SHORT() est-il comparable à UUID()

uuid_short() produit une conglomération au niveau du bit de l'ID du serveur, une composante temporelle assez statique et un entier 24 bits croissant séquentiellement. Ces bits sont insérés dans un entier de 8 octets. Le composant horaire est basé sur l'heure de démarrage du serveur.

uuid() produit une chaîne hexadécimale qui représente un UUID version1 de 16 octets. Les UUID de la version 1 sont un conglomérat au niveau du bit de l'ID du serveur, de l'horodatage actuel, de quelques octets qui entrent en jeu si vous générez des ID à grande vitesse et de quelques bits utilitaires.

Pour répondre à votre question :est-ce que uuid_short fournir une unicité temporelle et spatiale qui rivalise avec uuid ? La réponse est non. Par exemple, l'ID du serveur dans un uuid_short n'est qu'un octet. Donc, si vous avez 256 serveurs ou plus, au moins quelques-uns d'entre eux auront le même identifiant de nœud, ce qui signifie que vous perdez l'unicité de l'espace. À titre de comparaison, l'ID de serveur dans la version 1 UUID est long de 6 octets, ce qui élimine efficacement le risque de doublons pour toutes les batteries de serveurs d'entreprise, sauf la plus grande :)

Une meilleure question est de savoir si uuid_short est assez bon. Vous pourriez voir des collisions d'ID si vous :

  1. Générez plus de 16 millions d'IDS à partir du même serveur en peu de temps. ***
  2. Démarrez les serveurs avec le même ID de serveur exactement au même moment et partagez les données entre eux.
  3. Modifiez l'horloge système, puis redémarrez votre serveur.

Le deuxième problème semble peu probable pour la plupart des gens, mais le premier mérite d'être étudié avant de vous engager à créer uuid_short la base de vos clés.

*** Basé sur la documentation mysql pour uuid_short , il semble que vous verriez des collisions si vous génériez plus de 16 millions d'identifiants pendant la disponibilité d'un seul serveur. Mais ce serait idiot. Les docs mysql continuent en disant que tout va bien tant que vous ne générez pas 16 millions d'identifiants par seconde. Cela implique qu'ils doivent remplacer certains des bits de l'horodatage si vous épuisez les 16 millions d'ID séquentiels. Je n'ai pas testé cela.