95 votes

Qu'est-ce que le GUID ? Pourquoi et où dois-je l'utiliser ?

Qu'est-ce que le GUID ? Pourquoi et où dois-je l'utiliser ?
J'ai vu des références à GUID dans beaucoup d'endroits, et dans wikipedia, mais il n'est pas très clair de savoir où l'utiliser. Si quelqu'un pouvait répondre à cette question, ce serait bien. Merci

136voto

Brian Rudolph Points 3403

GUID signifie techniquement "globally unique identifier". Ce qu'il est, en fait, c'est une structure de 128 bits qui est improbable pour répéter ou créer une collision. Si vous faites le calcul, le domaine des valeurs se compte en quintillions.

Utilisez les guids lorsque vous avez plusieurs systèmes indépendants ou clients qui génèrent des ID qui doivent être uniques.

Par exemple, si j'ai 5 applications clientes qui créent et insèrent des données transactionnelles dans une table qui a une contrainte unique sur l'ID, alors utilisez les guids. Cela évite de devoir obliger un client à demander d'abord un identifiant émis par le serveur.

C'est également idéal pour les usines d'objets et les systèmes qui ont de nombreux types d'objets stockés dans différentes tables et pour lesquels vous ne voulez pas que deux objets aient le même ID. Cela rend les schémas de mise en cache et de balayage beaucoup plus faciles à mettre en œuvre.

6 votes

Réponse très claire et concise, merci. Cependant, juste un petit détail (c'est peut-être déjà une autre question, je m'en rends compte), lorsque vous créez une application basée sur javascript/HTML, et que vous avez besoin de renvoyer des enregistrements, par exemple pour des messages ou autre chose, est-il préférable de ne renvoyer qu'un GUID au frontend plutôt que l'ID réel ? Le raisonnement est bien sûr que si c'est l'ID (prim.key généré automatiquement), alors il serait assez facile d'en deviner un autre - alors qu'un GUID est évidemment beaucoup plus difficile à deviner ?

0 votes

"le domaine des valeurs est dans les quintillions" - Non, le domaine est largement plus que ça. Le nombre total d'UUIDs possibles de la version 4 est de 2122, soit 5,3x1036 (5.3 undecillion ). Voir Wikipedia .

30voto

James Curran Points 55356

Un GUID est un "Globally Unique IDentifier". Vous l'utilisez partout où vous avez besoin d'un identifiant qui garantit d'être différent de tous les autres.

En général, il suffit qu'une valeur soit "localement unique" - l'identité de la clé primaire d'une table de base de données, par exemple, doit seulement être différente des autres lignes de cette table, mais peut être identique à l'ID d'autres tables. (pas besoin d'un GUID ici)

Les GUID sont généralement utilisés lorsque vous définissez un ID qui doit être différent d'un ID que quelqu'un d'autre (hors de votre contrôle) définira. C'est le cas de l'identifiant d'interface des contrôles ActiveX. N'importe qui peut créer un ActiveX, sans savoir avec quel autre contrôle quelqu'un l'utilisera --- et rien n'empêche tout le monde de donner le même nom à ses contrôles. Les GUIDs permettent de les distinguer.

Les GUID sont une combinaison de l'heure (en très petites fractions de seconde) (il est donc assuré d'être différent de tout GUID défini avant ou après), et d'un nombre définissant votre emplacement (parfois pris à partir de l'adresse MAC de votre carte réseau) (il est donc assuré d'être différent de tout autre GUID défini en ce moment par quelqu'un d'autre).

Ils sont aussi parfois connus sous le nom d'UUID (universally unique ID).

4 votes

L'utilisation d'un Guid comme clé primaire ralentira la base de données car l'indexation d'un nombre est beaucoup plus rapide que celle d'un varchar.

1 votes

Oui, c'est pourquoi je l'ai utilisé comme exemple d'un endroit où vous n'avez pas besoin d'un GUID.

1 votes

C'est un compromis entre les lectures et les écritures. Il y a également une surcharge dans le courtage de clés entières uniques complexes. Sur la plupart des petites bases de données, l'utilisation de clés guidées ne nuit pas aux performances. Sur les bases de données plus importantes, cela peut devenir un problème. De plus, les guids sont des varchars et ne sont pas indexés en tant que tels.

18voto

splattne Points 48126

En plus de toutes les autres réponses, voici une générateur de GUID en ligne :

http://www.guidgenerator.com/

Qu'est-ce qu'un GUID ?

GUID (ou UUID) est un acronyme pour Identificateur unique mondial" (ou identificateur unique universel"). Il s'agit de est un nombre entier de 128 bits utilisé pour identifier des ressources. Le terme GUID est généralement utilisé par les développeurs travaillant avec les technologies Microsoft, tandis que UUID est utilisé partout ailleurs.

Dans quelle mesure un GUID est-il unique ?

128-bits est assez grand et l'algorithme de algorithme de génération est suffisamment unique que si 1,0000,000,000 de GUIDs par seconde pendant un an, la probabilité probabilité d'un doublon serait seulement 50 %. Ou si chaque humain sur Terre générait 600.000.000 de GUIDs, il y aurait il n'y aurait qu'une probabilité de 50% d'un duplicata.

Comment les GUID sont-ils utilisés ?

Les GUID sont utilisés dans le développement de logiciels comme clés de base de données, identifiants composants, ou à peu près partout où un un identifiant véritablement unique est nécessaire. Les GUID sont également utilisés pour identifier toutes les interfaces et tous les objets dans programmation COM.

1 votes

Dans le monde Windows, un moyen simple de générer un GUID est d'utiliser la commande Powershell : [Guid]::NewGuid().ToString().ToUpperInvariant()

0 votes

Voir mon commentaire sur Réponse de Curran . A proprement parler, tous les GUIDs sont des UUIDs, mais tous les UUIDs ne sont pas des GUIDs .

12voto

Michael Burr Points 181287

Un GUID est un "identifiant unique mondial". Également appelé UUID (Universally Unique ID).

Il s'agit essentiellement d'un nombre de 128 bits généré d'une certaine manière (voir RFC 4112). http://www.ietf.org/rfc/rfc4122.txt ) qui rend presque impossible la création de doublons. De cette façon, je peux générer des GUID sans qu'une organisation tierce doive me les donner pour garantir qu'ils sont uniques.

L'une des utilisations les plus répandues des GUID est celle d'identificateurs pour les entités COM sous Windows (classes, typelibs, interfaces, etc.). Grâce aux GUID, les développeurs pouvaient construire leurs composants COM sans avoir à s'adresser à Microsoft pour obtenir un identifiant unique. Même si l'identification des entités COM est une utilisation majeure des GUIDs, ils sont utilisés pour de nombreuses choses qui nécessitent des identifiants uniques. Certains développeurs génèrent des GUIDs pour les enregistrements de bases de données afin de leur fournir un identifiant qui peut être utilisé même s'ils doivent être uniques dans de nombreuses bases de données différentes.

En général, vous pouvez considérer un GUID comme un numéro de série qui peut être généré par n'importe qui à tout moment et qui saura que le numéro de série sera unique.

L'obtention d'un nom de domaine est un autre moyen d'obtenir des identifiants uniques. Pour garantir le caractère unique des noms de domaine, vous devez les obtenir auprès d'une organisation (administrée en dernier ressort par l'ICANN).

Comme les GUID peuvent être difficiles à manier (d'un point de vue de lisibilité humaine, il s'agit d'une chaîne de nombres hexadécimaux, généralement regroupés comme suit : aaaaaa-bbbb-cccc-dddd-ffffffffffff), certains espaces de noms qui nécessitent des noms uniques dans différentes organisations utilisent un autre système (souvent basé sur les noms de domaine Internet).

Par convention, l'espace de noms des paquets Java commence par le nom de domaine de l'organisation (inversé), suivi de noms déterminés de manière spécifique à l'organisation. Par exemple, un paquetage Java peut être nommé :

com.example.jpackage

Cela signifie que le traitement des collisions de noms devient la responsabilité de chaque organisation.

Les espaces de noms XML sont également rendus uniques de la même manière. Par convention, la personne qui crée un espace de noms XML est censée le rendre "sous-jacent" à un nom de domaine enregistré sous son contrôle. Par exemple :

xmlns="http://www.w3.org/1999/xhtml"

Les adresses MAC Ethernet constituent un autre moyen de gérer les identifiants uniques. Une entreprise qui fabrique des cartes Ethernet doit se faire attribuer un bloc d'adresses par l'IEEE (je crois que c'est l'IEEE). Dans ce cas, le schéma a plutôt bien fonctionné, et même si un fabricant se plante et émet des cartes avec des adresses MAC dupliquées, les choses fonctionneront toujours correctement tant que ces cartes ne sont pas sur le même sous-réseau, car au-delà d'un sous-réseau, seule l'adresse IP est utilisée pour acheminer les paquets. Bien que d'autres utilisations des adresses MAC puissent être affectées, l'un des algorithmes de génération de GUID utilise l'adresse MAC comme paramètre. Cette méthode de génération de GUID n'est plus aussi largement utilisée car elle est considérée comme une menace pour la vie privée.

Les identifiants fournis par Microsoft pour les pilotes "VxD" dans Windows 9x sont un exemple de schéma d'identification unique qui n'a pas très bien fonctionné. Les développeurs de pilotes VxD tiers étaient censés demander à Microsoft un ensemble d'identifiants à utiliser pour tout pilote écrit par le tiers. De cette façon, Microsoft pouvait s'assurer qu'il n'y avait pas de doublons d'ID. Malheureusement, de nombreux auteurs de pilotes n'ont jamais pris la peine de le faire et ont simplement utilisé l'ID figurant dans l'exemple de VxD qu'ils ont utilisé comme point de départ. Je ne suis pas sûr de l'ampleur des problèmes que cela a causé - je ne pense pas que l'unicité des ID VxD était absolument nécessaire, mais cela a probablement affecté certaines fonctionnalités de certaines API.

11voto

Keltia Points 8104

GUID ou UUID (globally vs Universally) Unique IDentifier est, en fait, un ID unique :) Si vous avez besoin de quelque chose de vraiment unique généré par une machine, il existe des bibliothèques pour vous en procurer un.

Voir GUID sur wikipedia pour les détails.

Quant à savoir quand vous n'avez pas besoin d'un GUID, c'est lorsqu'un compteur que vous contrôlez (d'une manière ou d'une autre, comme un type SQL SERIAL ou une séquence) est incrémenté. L'indexation d'une valeur "texte" (GUID sous forme textuelle) ou d'une valeur binaire de 128 bits (ce qu'est un GUID) est beaucoup plus coûteuse que celle d'un entier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X