Image de couverture - Base de Données : ID Auto-Incrémenté ou UUID ?

Base de Données : ID Auto-Incrémenté ou UUID ?

Les identifiants sont des suites de caractères dont le but est d'identifier de manière unique des données dans divers systèmes tels que des bases de données.

Icône de calendrier
Icône de chronomètre 6 min

Choisir le type d’identifiant idéal pour les enregistrements en base de données est une décision cruciale pour tout développeur. Deux choix populaires sont les IDs auto-incrémentés et les UUID (Universally Unique Identifier). Cet article explore les avantages et inconvénients de chaque option pour vous aider à faire le meilleur choix pour votre projet.

ID auto-incrémenté

Qu’est-ce qu’un ID auto-incrémenté ?

Un ID auto-incrémenté est un nombre entier qui augmente automatiquement à chaque nouvel enregistrement.

Le premier enregistrement reçoit l’ID 1, le second reçoit l’ID 2, etc.

Voici un exemple d’utilisateurs stockés dans une table users :

IDPseudoPremium
1Athiostrue
2Yinddifalse
3Hackaytrue

Avantages des IDs auto-incrémentés

1. Simplicité

Les IDs auto-incrémentés sont lisibles et faciles à mettre en place.

Lors de la création d’une table avec un ID auto-incrémenté, il suffit de définir la colonne id comme auto-incrémentée lors de la définition du schéma de la base de données.

Par exemple, en SQL :

copié !
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  pseudo VARCHAR(50),
  premium BOOLEAN
);

Les IDs seront par la suite générés automatiquement par la base de données, à chaque nouvel enregistrement.

2. Performance

Les IDs auto-incrémentés sont également plus rapides à générer et à rechercher en base de données.

De par leur nature de simples nombres entiers séquentiels, les IDs auto-incrémentés contribuent à optimiser la performance d’opérations d’indexation, de tri, de comparaison et de recherche.

Une requête SQL pour trouver un utilisateur par son ID sera par exemple très efficace :

copié !
SELECT * FROM users WHERE id = 37;

3. Taille réduite

Les IDs auto-incrémentés sont également d’excellents candidats lorsqu’il s’agit d’optimiser l’espace de stockage.

Un ID auto-incrémenté de type INT occupe 4 octets en mémoire (2^32 valeurs possibles), ce qui reste faible et permet de réduire significativement l’espace de stockage nécessaire.

Inconvénients des IDs auto-incrémentés

Malgré leurs avantages, les IDs auto-incrémentés présentent quelques inconvénients.

1. Centralisation

Les IDs auto-incrémentés sont souvent gérés par le SGBD pour leur simplicité et fiabilité. Cependant, dans un système distribué exploitant plusieurs bases de données, pour des gains de performance, de scalabilité, de sécurité ou de disponibilité, des problèmes peuvent survenir :

  • Doublons : Chaque base de données générant indépendamment ses IDs peut entraîner des conflits d’ID.
  • Synchronisation complexe : La coordination pour éviter les doublons entre plusieurs instances est difficile.

2.Sécurité

Les ID en auto-incrément sont prédictibles, ce qui peut notamment permettre à des utilisateurs mal intentionnés d’accéder à des enregistrements spécifiques en manipulant l’URL ou encore de deviner le nombre total d’enregistrements

Par exemple, si l’URL d’un profil utilisateur sur un site web est https://example.com/user/1036, un utilisateur peut :

  1. Essayer https://example.com/user/1037 pour accéder au profil suivant
  2. Savoir que l’application a eu au moins 1036 inscrits

Qu’est-ce qu’un UUID ?

Au même titre que les IDs auto-incrémentés, un UUID (Universally Unique Identifier) est un identifiant utilisé en informatique pour identifier des informations de manière unique.

Le format standard est composé de 32 caractères hexadécimaux (16 octets), regroupés en cinq groupes séparés par des tirets, sous la forme 5759456d-0ad2-4a3b-ba06-5bcac4f33481.

Avantages des UUIDs

1. Unicité globale

L’unicité globale concerne la garantie que chaque UUID sera unique, peu importe où et quand il est généré.

Contrairement aux identifiants incrémentiels, les UUID n’ont pas besoin d’être centralisés pour garantir leur unicité, ce qui les rend extrêmement utiles dans les environnements distribués, où plusieurs systèmes ou bases de données existent en parallèle.

Ainsi, chaque UUID étant créé de manière indépendante (par l’application), aucune coordination n’est nécessaire entre les différents systèmes ou bases de données pour éviter des conflits d’ID.

Un vrai avantage, surtout dans les systèmes distribués où garantir l’unicité serait difficile, voire impossible, avec une génération centralisée.

2. Scalabilité

La scalabilité fait référence à la capacité d’un système à grandir efficacement en ajoutant plus de ressources (serveurs, bases de données, instances d’applications, etc.), sans provoquer de problèmes techniques.

Les UUIDs facilitent cette scalabilité parce qu’ils permettent à chaque composant d’un système distribué de générer des identifiants uniques sans dépendre d’une instance centrale.

Chaque composant fonctionne ainsi de manière autonome, sans besoin de coordination pour la génération d’IDs, ce qui offre une plus grande flexibilité en matière d’infrastructure.

3. Sécurité

Les UUIDs offrent également des avantages en termes de sécurité. Contrairement aux IDs auto-incrémentés, ils sont imprévisibles. Un attaquant ne peut pas deviner la structure ou la séquence d’UUIDs.

Cela empêche les attaques basées sur l’observation de patterns dans les URLs (comme deviner des identifiants d’utilisateurs).

4. Portabilité

Les UUID sont pris en charge par de nombreux langages de programmation, systèmes d’exploitation et bases de données, ce qui facilite leur intégration dans une large gamme d’applications.

Étant indépendants de l’environnement, les UUID peuvent être facilement échangés entre différents systèmes sans risque de conflit.

Inconvénients des UUIDs

Malgré leurs avantages, les UUIDs présentent quelques inconvénients.

1. Performance

Les UUIDs, de par leur format aléatoire, sont plus coûteux à générer et peuvent ralentir les opérations de recherche, indexation, tri et comparaison en base de données, car leur caractère non séquentiel demande plus de ressources.

2. Taille

Les UUIDs occupent plus d’espace mémoire que les IDs auto-incrémentés. Un UUID pèse environ 16 octets en base de données, comparé aux 4 octets d’un ID auto-incrémenté de type INT.

Si une application gère une grande quantité de données, cela peut entraîner une augmentation significative de l’espace de stockage requis.

3. Complexité

Contrairement aux IDs auto-incrémentés, les UUIDs sont moins lisibles et plus complexes à manipuler.

Leur longueur et leur format les rendent plus difficiles à identifier et interpréter lors de l’analyse des données, ce qui peut compliquer certaines tâches des développeurs ou des administrateurs de base de données.

Différences entre ID en auto-incrément et UUID

Tableau comparatif

Choisir entre ID auto-incrémenté ou UUID n’est pas toujours évident. Voic un tableau comparatif résumant les caractéristiques et atouts de chaque approche.

CritèreAuto-incrémentUUID
NatureAléatoireSéquentielle
UnicitéLocaleGlobale
ScalabilitéMoyenneHaute
PerformanceRapide à générer et à rechercherPlus lent à générer et à rechercher
SécuritéMoyenne (prédictible)Élevée (difficile à deviner)
TaillePetite (4 octets)Grande (16 octets)
ComplexitéFaibleÉlevée

Quand utiliser un ID auto-incrémenté ?

Les IDs auto-incrémentés sont idéaux pour :

  • Des applications simples et monolithiques.
  • Des systèmes où la base de données centrale est garantie.
  • Des cas où la performance de la base de données est critique.

Exemple : une table articles d’un blog, où les articles sont créés dans un environnement centralisé.

Quand utiliser un UUID ?

Les UUIDs sont recommandés pour :

  • Des systèmes distribués et microservices.
  • Des applications nécessitant une haute scalabilité.
  • Des cas où la sécurité et l’unicité globale sont essentielles.

Exemple : une table users ou posts dans un réseau social, où les utilisateurs et les posts sont créés dans un environnement distribué.

Le choix entre UUID et auto-incrément dépend fortement des besoins spécifiques de votre projet. Pour des applications simples avec une base de données centrale, les IDs auto-incrémentés sont souvent suffisants et plus performants. Pour des systèmes distribués et des applications nécessitant une haute scalabilité et sécurité, les UUIDs sont plus appropriés. Prenez en compte les critères de performance, sécurité, et scalabilité pour faire un choix éclairé.

Lire aussi