web-dev-qa-db-fra.com

Quel est le meilleur identifiant pour un ID utilisateur? 64 bits entiers, UUID V5 ou 64 caractères SHA256 UID?

Je souhaite à l'avenir ma demande. Quel est le meilleur type d'identifiant à utiliser?

J'envisage:

  1. 64 bits entier
  2. Uuid
  3. 64 caractères SHA256

Je ne développe pas de système distribué, il est donc nécessaire d'utiliser un UUID?

Aussi, quelle est la qualité INTEGER joints vs VARCHAR joints?

Enfin, stocke le nom d'utilisateur (unique) et les données de message dans la même table MySQL mieux que de stocker l'ID utilisateur?

5
user1203914

Utiliser des entiers. C'est la manière la plus simple et la plus efficace (surtout pour InnoDB).

C'est-à-dire

  • n'utilisez pas de hachages ou d'uuids ou de varcharars à la place de Int
  • n'utilisez pas la clé naturelle lorsque vous avez des clés étrangères

Les raisons?

  • les comparaisons de Varcharis nécessitent des tests Collection + cas
  • architecture d'index dans les aménagements Innodb Faveurs (Index en cluster idéal est étroit, numérique, croissant monotone)
  • hASHES et GUIDS ET VARCHAR CAUSE LA FRAGMENTATION
  • data plus larges + index des lignes lorsque vous n'utilisez pas entier
  • 64 caractères nécessitent 64/66 octets à stocker. 64 bits in nécessite 8 octets

Autres observations:

  • Avez-vous besoin de 64 bits de nombres?
7
gbn

Les UUIDS/GUID sont souhaitant lorsque vous souhaitez des ordinateurs multiples, indépendants, créant des identifiants uniques globalement.

Mais le sucer comme une clé primaire.

Ils sont gros - 36 caractères, pire si vous par défaut à UTF8, qui est surkill. L'hexagone en eux peut être converti en binaire (16). En InnoDB, la PK est annexée à chaque clé secondaire, multipliant ainsi le coût de l'espace d'un PK volumineux.

Ils sont aléatoires - une fois que vous avez plus de données que vous pouvez mettre en cache, vous frappez généralement le disque pour chaque extraction. Cela dépose votre performance à ~ 100 opérations/s. Juste lorsque vous avez besoin d'évolutivité, il est enlevé de vous!

Si tous les écrit sont effectués à un seul maître, utilisez Auto_inCrementation: Midixint non signé jusqu'à 16 m, Int non signé jusqu'à 4G, ou Bietsint pour l'optimiste incroyablement optimiste.

Quant aux performances de la CPU de Varchar, Binary, Int, etc. - ce n'est pas la question. La question est la principale victoire de la clé, car cela conduit à la cache-câbilité de l'indice, qui conduit à des E/S étant le goulot d'étranglement. Si tout peut être mis en cache, ne vous inquiétez pas du type et de la taille de la clé. (OK, les types de données dans une jointure doivent être identiques ou assez proches. Différentes collations, par exemple, détruit la convivialité d'un index.)

2
Rick James