web-dev-qa-db-fra.com

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

Qu'est-ce que le GUID exactement? Pourquoi et où devrais-je l'utiliser?
J'ai vu des références à GUID dans de nombreux endroits et dans wikipedia, mais il n'est pas très clair de vous dire où l'utiliser. Si quelqu'un pouvait répondre à cela, ce serait bien. Merci

61
Danmaxis

GUID signifie techniquement un identifiant globalement unique. En fait, il s'agit d'une structure de 128 bits qui est peu probable de se reproduire ou de créer une collision. Si vous faites le calcul, le domaine des valeurs est dans le ndecillions .

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

Par exemple, si j'ai 5 applications clientes créant et insérant des données transactionnelles dans une table qui a une contrainte unique sur l'ID, alors utilisez des guides. Cela évite d'avoir à forcer un client à demander d'abord un ID délivré au serveur.

Ceci 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 où vous ne voulez pas que 2 objets aient le même ID. Cela rend les schémas de mise en cache et de nettoyage beaucoup plus faciles à implémenter.

90
Brian Rudolph

A GUID est un "identifiant globalement unique". Vous l'utilisez partout où vous avez besoin d'un identifiant qui sera garanti différent de tous les autres.

Habituellement, vous n'avez besoin que d'une valeur pour être "localement unique" - l'identité de la clé primaire dans une table de base de données, par exemple, n'a besoin que d'être différente des autres lignes de cette table, mais peut être identique à l'ID dans 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) va définir. Un tel endroit dans l'identifiant d'interface sur les contrôles ActiveX. N'importe qui peut créer un ActiveX et ne pas savoir avec quel autre contrôle quelqu'un les utilisera --- et rien n'empêche tout le monde de donner à leurs contrôles le même nom. Les GUID les gardent distincts.

Les GUID sont une combinaison du temps (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 également parfois appelés UUID (ID universellement unique).

21
James Curran

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

http://www.guidgenerator.com/

Qu'est-ce qu'un GUID?

GUID (ou UUID) est un acronyme pour "Globally Unique Identifier" (ou "Universally Unique Identifier"). Il s'agit d'un nombre entier de 128 bits utilisé pour identifier les 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.

Quel est le caractère unique d'un GUID?

128 bits est suffisamment grand et l'algorithme de génération est suffisamment unique pour que si 1 000 000 000 de GUID par seconde soient générés pendant 1 an, la probabilité d'un doublon ne serait que de 50%. Ou si chaque humain sur Terre générait 600 000 000 de GUID, il n'y aurait qu'une probabilité de 50% de doublon.

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, identificateurs de composants ou à peu près partout où un identifiant vraiment unique est requis. Les GUID sont également utilisés pour identifier toutes les interfaces et tous les objets dans la programmation COM.

14
splattne

A GUID est un "ID global unique". Également appelé UUID (ID universellement unique).

C'est essentiellement un nombre de 128 bits qui est généré d'une manière (voir RFC 4112 http://www.ietf.org/rfc/rfc4122.txt ) ce qui rend presque impossible la génération de doublons. De cette façon, je peux générer des GUID sans qu'une organisation tierce ne me les donne pour m'assurer qu'ils sont uniques.

Une utilisation répandue des GUID est comme identifiant pour les entités COM sous Windows (classes, listes de types, interfaces, etc.). À l'aide de GUID, les développeurs pouvaient créer leurs composants COM sans passer par Microsoft pour obtenir un identifiant unique. Même si l'identification des entités COM est une utilisation importante des GUID, elles sont utilisées pour de nombreuses choses qui nécessitent des identifiants uniques. Certains développeurs généreront des GUID pour les enregistrements de base de données afin de leur fournir un ID pouvant être utilisé même lorsqu'ils doivent être uniques dans de nombreuses bases de données différentes.

Généralement, 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 ils sauront que le numéro de série sera unique.

Pour obtenir des identifiants uniques, vous pouvez également obtenir un nom de domaine. Pour garantir l'unicité des noms de domaine, vous devez les obtenir auprès d'une organisation (finalement administrée par l'ICANN).

Étant donné que les GUID peuvent être difficiles à gérer (d'un point de vue lisible par l'homme, il s'agit d'une chaîne de nombres hexadécimaux, généralement regroupés comme suit: aaaaaaaa-bbbb-cccc-dddd-ffffffffffff), certains espaces de noms qui nécessitent des noms uniques dans différentes organisations utilisent un autre schéma ( souvent basés sur des noms de domaine Internet).

Ainsi, l'espace de noms pour les packages Java par convention commence par le nom de domaine de l'organisation (inversé) suivi de noms qui sont déterminés d'une manière spécifique à l'organisation. Par exemple, un Java le package peut être nommé:

com.example.jpackage

Cela signifie que la gestion 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, une personne qui crée un espace de noms XML est censée en faire "sous" un nom de domaine enregistré sous son contrôle. Par exemple:

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

Les adresses MAC Ethernet sont également gérées par les ID uniques. Une entreprise qui fabrique des cartes Ethernet doit obtenir un bloc d'adresses qui leur est attribué par l'IEEE (je pense que c'est l'IEEE). Dans ce cas, le schéma a plutôt bien fonctionné, et même si un fabricant bousille et émet des cartes avec des adresses MAC en double, les choses fonctionneront toujours bien tant que ces cartes ne sont pas sur le même sous-réseau, car au-delà d'un sous-réseau, seule l'IP l'adresse est utilisée pour acheminer les paquets. Bien qu'il existe d'autres utilisations des adresses MAC qui pourraient ê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 GUID n'est plus aussi largement utilisée car elle est considérée comme une menace pour la vie privée.

Un exemple de schéma pour trouver des identificateurs uniques qui ne fonctionnaient pas très bien était l'ID fourni par Microsoft pour les pilotes "VxD" dans Windows 9x. Les développeurs de pilotes VxD tiers étaient censés demander à Microsoft un ensemble d'ID à utiliser pour tous les pilotes écrits par le tiers. De cette façon, Microsoft pouvait s'assurer qu'il n'y avait pas d'ID en double. Malheureusement, de nombreux rédacteurs de pilotes n'ont jamais dérangé et ont simplement utilisé n'importe quel ID dans l'exemple VxD qu'ils ont utilisé comme point de départ. Je ne sais pas combien de problèmes cela a causé - je ne pense pas que l'unicité de l'ID VxD était absolument nécessaire, mais cela a probablement affecté certaines fonctionnalités de certaines API.

11
Michael Burr

GUID ou UUID (global vs universel) L'identifiant unique est, eh bien, un identifiant unique :) Lorsque vous avez besoin de quelque chose de vraiment unique généré, il y a des bibliothèques pour vous en procurer un.

Voir GUID sur wikipedia pour plus de 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 SERIAL SQL 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 (dont un GUID est) est beaucoup plus cher qu'un entier).

9
Keltia

Quelqu'un a dit qu'il s'agissait conceptuellement de valeurs aléatoires de 128 bits, ce qui est essentiellement vrai, mais après avoir fait un peu de lecture sur UUID (GUID se réfère généralement à l'implémentation de Microsoft de UUID), je vois qu'il existe plusieurs versions différentes d'UUID, et la plupart d'entre elles ne sont pas réellement aléatoires. Il est donc possible de générer un UUID pour une machine (ou autre chose) et de pouvoir répéter ce processus de manière fiable pour obtenir le même UUID sur la route, ce qui est important pour certaines applications.

5
skiphoppy

Pour moi, il est plus facile de les considérer comme des "valeurs aléatoires 128 bits". C'est essentiellement ce qu'ils sont. Il existe des algorithmes pour inclure un peu d'informations dans quelques chiffres de votre GUID (donc la partie aléatoire devient un peu plus petite), mais ce sont quand même de grandes valeurs presque aléatoires.

Puisqu'ils sont si grands, il est extrêmement peu probable que deux GUID soient jamais générés qui soient identiques. À toutes fins pratiques, chaque GUID jamais généré est unique au monde.

Je vous laisse le soin de savoir où les utiliser, mais d'autres réponses ont déjà quelques exemples. Laissez courir votre imagination. :)

4
Vilx-

Cela peut être difficile à comprendre à cause de tous les calculs qui se produisent derrière leur génération. Considérez-le comme un identifiant unique. Vous pouvez demander à Visual Studio d'en générer un pour vous, ou .NET si vous utilisez C # ou l'une des nombreuses autres applications ou sites Web. Ils sont considérés comme uniques car il y a une si petite chance idiote que vous verrez le même deux fois que cela ne vaut pas la peine d'être considéré.

3
Dan Revell

ID global unique de 128 bits. Vous pouvez générer des GUID d'ici le coucher du soleil et vous ne générez jamais les mêmes GUID deux fois, et personne d'autre non plus. Ils sont beaucoup utilisés avec COM.

Comme par exemple pour quelque chose que vous utiliseriez, nous les utilisons dans l'un de nos produits. Nos utilisateurs peuvent générer des catégories et des cartes sur différents appareils. Nous voulons nous assurer que nous ne confondons pas une catégorie créée sur un appareil avec une catégorie créée sur un autre, il est donc important que les ID soient uniques, peu importe qui les génère, où ils les génèrent et quand ils les génèrent. Nous utilisons donc des GUID (en fait, nous utilisons notre propre schéma en utilisant des nombres 64 bits mais ils sont similaires aux GUID).

3
mhenry1384

J'ai travaillé sur un système de centre d'appels ACD il y a quelques années où nous voulions rassembler les enregistrements des détails des appels de plusieurs processeurs d'appels dans une seule base de données. J'ai configuré une colonne dans MS SQL pour générer un GUID pour la clé de base de données plutôt que d'utiliser un ID séquentiel généré par le système (colonne d'identité). À l'époque, cela nécessitait de définir la valeur par défaut sur NewID ( ou la générer dans le code, mais la fonction NewID () était plus sûre.) Bien sûr, avoir une grande valeur pour une clé peut soulever quelques sourcils, mais je préférerais abandonner l'espace plutôt que de risquer une collision.

Je n'ai vu personne s'adresser en utilisant un GUID comme clé de base de données, donc j'ai pensé qu'il pourrait être utile de savoir que vous pourriez le faire aussi.

3
Tom Schaefer

GUID = Global Unique IDentifier.

Utilisez-le lorsque vous souhaitez identifier de manière unique quelque chose dans un contexte global.

Ce générateur peut être pratique.

2
Greg Hurlman

GUID signifie "Globally Unique Identifier" et vous l'utilisez lorsque vous voulez avoir, euh, un identifiant globalement unique.

Dans les flux RSS, par exemple, vous devriez avoir un GUID pour chaque élément du flux. De cette façon, le logiciel de lecture de flux peut savoir si vous avez lu cet élément ou non. Sans GUID, ce serait impossible à dire.

A GUID diffère de quelque chose comme un ID de base de données en ce que peu importe qui crée un objet - vous, moi, le gars en bas de la rue - nos GUID seront toujours être différent. Il ne devrait pas y avoir de collision avec un GUID.

Vous verrez également le terme UUID, qui signifie "Universally Unique Identifier". Il n'y a essentiellement aucune différence entre les deux. UUID est le terme le plus approprié. GUID est le terme utilisé par Microsoft.

2
August

Si vous devez générer un identifiant qui doit être unique pendant toute la durée de vie de votre application, vous utilisez un GUID.

Imaginez que vous ayez un serveur avec des sessions, si vous donnez à chaque session un GUID, vous êtes certain qu'il sera unique pour chaque session jamais créée par votre serveur. Ceci est utile pour retrouver les bogues.

2
Edouard A.

Une application particulièrement utile des GUID que j'ai trouvée consiste à les utiliser pour suivre des visiteurs uniques dans des applications Web où les visiteurs sont anonymes (c'est-à-dire non connectés ou enregistrés).

2
yalestar

L'article Wikipedia sur les GUID est assez clair sur leur utilisation - peut-être que reformuler votre question aiderait - pourquoi avez-vous besoin d'un GUID pour?

1
Rob