Was genau ist GUID? Warum und wo soll ich es verwenden?

73

Was genau ist GUID? Warum und wo soll ich es verwenden?
Ich habe an vielen Stellen und in Wikipedia Verweise auf GUID gesehen, aber es ist nicht sehr klar, wo Sie es verwenden sollen. Wenn jemand darauf antworten könnte, wäre es schön. Vielen Dank

Danmaxis
quelle

Antworten:

107

GUID steht technisch für Global Unique Identifier. Was es eigentlich ist, ist eine 128-Bit-Struktur, die sich wahrscheinlich nie wiederholen oder eine Kollision erzeugen wird. Wenn Sie rechnen , liegt der Wertebereich in den Undekillionen .

Verwenden Sie Guids, wenn mehrere unabhängige Systeme oder Clients IDs generieren, die eindeutig sein müssen.

Wenn ich beispielsweise 5 Client-Apps habe, die Transaktionsdaten erstellen und in eine Tabelle einfügen, deren ID eindeutig eingeschränkt ist, verwenden Sie Guids. Dies verhindert, dass ein Client gezwungen werden muss, zuerst eine ausgegebene ID vom Server anzufordern.

Dies ist auch ideal für Objektfabriken und -systeme, in denen zahlreiche Objekttypen in verschiedenen Tabellen gespeichert sind, in denen keine zwei Objekte dieselbe ID haben sollen. Dies erleichtert das Implementieren von Caching- und Scavenging-Schemas erheblich.

Brian Rudolph
quelle
6
Sehr saubere / prägnante Antwort danke. Nur eine Seite davon (könnte bereits eine andere Frage sein, die mir klar ist): Wenn Sie beispielsweise eine Javascript / HTML-basierte App erstellen und Datensätze für Nachrichten oder ähnliches zurückgeben müssen, ist es besser, nur eine GUID an das Frontend zurückzugeben als die tatsächliche ID? Argumentation ist natürlich, wenn es sich um die ID handelt (automatisch generierter prim.key), dann wäre es ziemlich einfach, eine andere zu erraten - während eine GUID offensichtlich viel schwieriger zu erraten ist?
Dav.id
"Domäne der Werte liegt in den Billionen" - Nein, die Domäne ist weitaus größer. Die Gesamtzahl der möglichen UUIDs der Version 4 beträgt 2ʌ122 oder 5,3x10ʌ36 (5,3 Undecillion ). Siehe Wikipedia .
Basil Bourque
24

Eine GUID ist ein "Global Unique IDentifier". Sie verwenden es überall dort, wo Sie eine Kennung benötigen, die sich garantiert von allen anderen unterscheidet.

Normalerweise muss ein Wert nur "lokal eindeutig" sein - die Primärschlüsselidentität in einer Datenbanktabelle muss sich beispielsweise nur von den anderen Zeilen in dieser Tabelle unterscheiden, kann jedoch mit der ID in anderen Tabellen identisch sein . (hier ist keine GUID erforderlich)

GUIDs werden im Allgemeinen verwendet, wenn Sie eine ID definieren, die sich von einer ID unterscheiden muss, die von einer anderen Person (außerhalb Ihrer Kontrolle) definiert wird. Eine solche Stelle in der Schnittstellenkennung auf ActiveX-Steuerelementen. Jeder kann ein ActiveX erstellen und weiß nicht, mit welchem ​​anderen Steuerelement jemand sie verwenden wird - und nichts hindert jeden daran, seinen Steuerelementen den gleichen Namen zu geben. GUIDs unterscheiden sie voneinander.

GUIDs sind eine Kombination aus der Zeit (in sehr kleinen Sekundenbruchteilen) (so dass sichergestellt ist, dass sie sich von allen zuvor oder später definierten GUIDs unterscheidet) und einer Zahl, die Ihren Standort definiert (manchmal aus der MAC-Adresse Ihrer Netzwerkkarte entnommen). (Es ist also sicher, dass es sich von jeder anderen GUID unterscheidet, die derzeit von jemand anderem definiert wird.)

Sie werden manchmal auch als UUIDs (Universal Unique ID) bezeichnet.

James Curran
quelle
3
Die Verwendung eines Guid als Primärschlüssel verlangsamt die Datenbank, da die Indizierung einer Zahl viel schneller ist als die Indizierung eines Varchars
Sergio
Ja, deshalb habe ich es als Beispiel für einen Ort verwendet, an dem Sie keine GUID benötigten.
James Curran
1
Es ist ein Kompromiss zwischen Lesen und Schreiben. Die komplexe Vermittlung von eindeutigen Ganzzahlschlüsseln ist ebenfalls mit einem Overhead verbunden. Bei den meisten kleineren Datenbanken wird die Verwendung von Guid-Schlüsseln die Leistung effektiv nicht beeinträchtigen. Bei größeren Datenbanken kann dies zu einem Problem werden. Außerdem sind Guids Varchars und werden nicht als solche indiziert.
Brian Rudolph
Tatsächlich ist eine GUID eine bestimmte Variante der Standard- UUID . Speziell "Variante 2", identifiziert durch ein Drei-Bit-Muster (110x N = c..d, 3 Bits). Mit anderen Worten, alle GUIDs sind UUIDs, aber nicht alle UUIDs sind GUIDs. GUIDs, die hauptsächlich auf Microsoft-Plattformen verwendet werden. In der Microsoft-Dokumentation wird manchmal "GUID" verwendet, wenn auf alle Arten von UUIDs verwiesen wird. Daher kann der Begriff verwirrend sein.
Basil Bourque
15

Zusätzlich zu allen anderen Antworten finden Sie hier einen Online-GUID-Generator :

http://www.guidgenerator.com/

Was ist eine GUID?

GUID (oder UUID) ist eine Abkürzung für "Global Unique Identifier" (oder "Universally Unique Identifier"). Es ist eine 128-Bit-Ganzzahl, mit der Ressourcen identifiziert werden. Der Begriff GUID wird im Allgemeinen von Entwicklern verwendet, die mit Microsoft-Technologien arbeiten, während UUID überall verwendet wird.

Wie einzigartig ist eine GUID?

128 Bit sind groß genug und der Generierungsalgorithmus ist so einzigartig, dass bei einer Generierung von 1.0000.000.000 GUIDs pro Sekunde für 1 Jahr die Wahrscheinlichkeit eines Duplikats nur 50% beträgt. Oder wenn jeder Mensch auf der Erde 600.000.000 GUIDs generieren würde, gäbe es nur eine 50% ige Wahrscheinlichkeit für ein Duplikat.

Wie werden GUIDs verwendet?

GUIDs werden in der Softwareentwicklung als Datenbankschlüssel, Komponentenkennungen oder fast überall dort verwendet, wo eine wirklich eindeutige Kennung erforderlich ist. GUIDs werden auch verwendet, um alle Schnittstellen und Objekte in der COM-Programmierung zu identifizieren.

splattne
quelle
1
In der Windows-Welt besteht eine einfache Möglichkeit zum Generieren einer GUID darin, den Powershell-Befehl zu verwenden: [Guid] :: NewGuid (). ToString (). ToUpperInvariant ()
Milan Gardian
Siehe meinen Kommentar zu Antwort von Curran . Genau genommen sind alle GUIDs UUIDs, aber nicht alle UUIDs sind GUIDs .
Basil Bourque
12

Eine GUID ist eine "global eindeutige ID". Wird auch als UUID (Universally Unique ID) bezeichnet.

Grundsätzlich handelt es sich um eine 128-Bit-Zahl, die auf eine Weise generiert wird (siehe RFC 4112 http://www.ietf.org/rfc/rfc4122.txt ), die die Generierung von Duplikaten nahezu unmöglich macht. Auf diese Weise kann ich GUIDs generieren, ohne dass eine Drittanbieterorganisation sie mir geben muss, um sicherzustellen, dass sie eindeutig sind.

Eine weit verbreitete Verwendung von GUIDs sind Bezeichner für COM-Entitäten unter Windows (Klassen, Typelibs, Schnittstellen usw.). Mithilfe von GUIDs können Entwickler ihre COM-Komponenten erstellen, ohne sich an Microsoft wenden zu müssen, um eine eindeutige Kennung zu erhalten. Obwohl die Identifizierung von COM-Entitäten eine Hauptanwendung von GUIDs ist, werden sie für viele Dinge verwendet, die eindeutige Kennungen benötigen. Einige Entwickler generieren GUIDs für Datenbankeinträge, um ihnen eine ID bereitzustellen, die auch dann verwendet werden kann, wenn sie für viele verschiedene Datenbanken eindeutig sein müssen.

Im Allgemeinen können Sie sich eine GUID als Seriennummer vorstellen, die von jedem jederzeit generiert werden kann und der weiß, dass die Seriennummer eindeutig ist.

Andere Möglichkeiten, eindeutige Kennungen zu erhalten, umfassen das Abrufen eines Domänennamens. Um die Eindeutigkeit von Domain-Namen sicherzustellen, müssen Sie diese von einer Organisation erhalten (die letztendlich von ICANN verwaltet wird).

Da GUIDs unhandlich sein können (aus menschlicher Sicht sind sie eine Folge von Hexadezimalzahlen, die normalerweise so gruppiert sind: aaaaaaaa-bbbb-cccc-dddd-ffffffffffff), verwenden einige Namespaces, die eindeutige Namen in verschiedenen Organisationen benötigen, ein anderes Schema ( häufig basierend auf Internet-Domain-Namen).

Daher beginnt der Namespace für Java-Pakete gemäß Konvention mit dem Domänennamen der Organisation (umgekehrt), gefolgt von Namen, die auf organisationsspezifische Weise festgelegt werden. Ein Java-Paket könnte beispielsweise Folgendes heißen:

com.example.jpackage

Dies bedeutet, dass der Umgang mit Namenskollisionen in die Verantwortung jeder Organisation fällt.

XML-Namespaces werden auf ähnliche Weise auch eindeutig gemacht. Konventionell sollte jemand, der einen XML-Namespace erstellt, ihn unter einem von ihm kontrollierten registrierten Domainnamen "unter" machen. Zum Beispiel:

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

Eine andere Möglichkeit, eindeutige IDs zu verwalten, sind Ethernet-MAC-Adressen. Ein Unternehmen, das Ethernet-Karten herstellt, muss einen Adressblock erhalten, der ihm vom IEEE zugewiesen wird (ich denke, es ist das IEEE). In diesem Fall hat das Schema ziemlich gut funktioniert, und selbst wenn ein Hersteller Karten mit doppelten MAC-Adressen vermasselt und ausgibt, funktionieren die Dinge immer noch in Ordnung, solange sich diese Karten nicht im selben Subnetz befinden, da über ein Subnetz hinaus nur die IP Adresse wird verwendet, um Pakete weiterzuleiten. Obwohl es einige andere Verwendungszwecke von MAC-Adressen gibt, die möglicherweise betroffen sind, verwendet einer der Algorithmen zum Generieren von GUIDs die MAC-Adresse als einen Parameter. Diese GUID-Generierungsmethode wird nicht mehr so ​​häufig verwendet, da sie als Datenschutzbedrohung angesehen wird.

Ein Beispiel für ein Schema zur Erstellung eindeutiger Kennungen, die nicht sehr gut funktionierten, waren die von Microsoft bereitgestellten IDs für 'VxD'-Treiber in Windows 9x. Entwickler von VxD-Treibern von Drittanbietern sollten Microsoft nach einer Reihe von IDs fragen, die für alle von Drittanbietern geschriebenen Treiber verwendet werden können. Auf diese Weise konnte Microsoft sicherstellen, dass keine doppelten IDs vorhanden waren. Leider haben sich viele Treiberschreiber nie darum gekümmert und einfach die ID in dem Beispiel-VxD verwendet, das sie als Ausgangspunkt verwendet haben. Ich bin mir nicht sicher, wie viel Ärger dies verursacht hat - ich glaube nicht, dass die Eindeutigkeit der VxD-ID absolut notwendig war, aber es hat wahrscheinlich einige Funktionen in einigen APIs beeinträchtigt.

Michael Burr
quelle
10

GUID oder UUID (global oder universell) Unique IDentifier ist eine eindeutige ID :) Wenn Sie eine wirklich einzigartige maschinengenerierte ID benötigen, gibt es Bibliotheken, mit denen Sie eine erhalten können.

Siehe GUID auf Wikipedia für Details.

Wenn Sie keine GUID benötigen, wird ein Zähler, den Sie steuern (auf die eine oder andere Weise, wie ein SERIAL SQL-Typ oder eine Sequenz), inkrementiert. Das Indizieren eines "Text" -Werts (GUID in Textform) oder eines 128-Bit-Binärwerts (was eine GUID ist) ist weitaus teurer als eine Ganzzahl.

Keltia
quelle
6

Jemand sagte, es handele sich konzeptionell um 128-Bit-Zufallswerte, und das ist im Wesentlichen richtig, aber nachdem ich ein wenig über UUID gelesen habe (GUID bezieht sich normalerweise auf die Implementierung von UUID durch Microsoft), sehe ich, dass es mehrere verschiedene UUID-Versionen gibt, und die meisten davon sind eigentlich nicht zufällig. So ist es möglich, eine UUID für eine Maschine (oder etwas anderes) zu generieren und diesen Vorgang zuverlässig zu wiederholen, um später dieselbe UUID zu erhalten, was für einige Anwendungen wichtig ist.

Skiphoppy
quelle
1
Das ist etwas, was die Leute normalerweise nicht merken, wenn sie über GUIDs sprechen
BobbyShaftoe
5

Für mich ist es einfacher, sie einfach als "128-Bit-Zufallswerte" zu betrachten. Welches ist im Wesentlichen, was sie sind. Es gibt einige Algorithmen, um ein paar Informationen in ein paar Ziffern Ihrer GUID aufzunehmen (daher wird der zufällige Teil etwas kleiner), aber es handelt sich immer noch um ziemlich große, fast zufällige Werte.

Da sie so groß sind, ist es äußerst unwahrscheinlich, dass jemals zwei GUIDs generiert werden, die gleich sind. Für alle praktischen Zwecke ist jede jemals generierte GUID weltweit einzigartig.

Ich überlasse es Ihnen, herauszufinden, wo Sie sie verwenden können, aber andere Antworten haben bereits einige Beispiele. Lassen Sie Ihrer Fantasie freien Lauf. :) :)

Vilx-
quelle
1
Es mag einfacher sein, sie als "128-Bit-Zufallswerte" zu betrachten, aber das kann zu einigen Problemen führen, wenn sie missbraucht werden. Raymond Chan hat eine gute Beschreibung auf ihnen blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx
Jon
Dieser Link ist defekt, daher hier der aktualisierte: devblogs.microsoft.com/oldnewthing/20080627-00/?p=21823
Vilx
Ich werde jedoch bemerken, dass heutzutage die häufigste GUID die GUID der Version 4 ist, bei der es sich in der Tat fast ausschließlich um zufällige Bits handelt.
Vilx
4

Kann aufgrund all der Mathematik, die dahinter steckt, schwer zu verstehen sein. Betrachten Sie es als eine eindeutige ID. Sie können Visual Studio veranlassen, eine für Sie zu generieren, oder .NET, wenn Sie zufällig C # oder eine der vielen anderen Anwendungen oder Websites verwenden. Sie gelten als einzigartig, weil es eine so dumme kleine Chance gibt, dass Sie dieselbe zweimal sehen, dass es sich nicht lohnt, darüber nachzudenken.

Dan Revell
quelle
4

128-Bit-ID mit globaler Eindeutigkeit. Sie können von jetzt an bis zum Sonnenuntergang GUIDs generieren, und Sie generieren nie zweimal dieselbe GUID, und sonst niemand. Sie werden häufig mit COM verwendet.

Zum Beispiel für etwas, für das Sie sie verwenden würden, verwenden wir sie in einem unserer Produkte. Unsere Benutzer können Kategorien und Karten auf verschiedenen Geräten generieren. Wir möchten sicherstellen, dass wir eine auf einem Gerät erstellte Kategorie nicht mit einer auf einem anderen Gerät erstellten Kategorie verwechseln. Daher ist es wichtig, dass IDs eindeutig sind, unabhängig davon, wer sie generiert, wo sie generiert werden und wann sie generiert werden. Wir verwenden also GUIDs (tatsächlich verwenden wir unser eigenes Schema mit 64-Bit-Zahlen, aber sie ähneln GUIDs).

mhenry1384
quelle
4

Ich habe vor einigen Jahren an einem ACD-Callcenter-System gearbeitet, bei dem wir Anrufdetailaufzeichnungen von mehreren Anrufprozessoren in einer einzigen Datenbank sammeln wollten. Ich habe eine Spalte in MS SQL eingerichtet, um eine GUID für den Datenbankschlüssel zu generieren, anstatt eine vom System generierte sequentielle ID (Identitätsspalte) zu verwenden. Damals war es erforderlich, den Standardwert auf NewID zu setzen (oder ihn im Code zu generieren, aber die Funktion NewID () war sicherer). Natürlich kann ein großer Wert für einen Schlüssel ein paar Augenbrauen hochziehen, aber ich würde lieber den Platz aufgeben, als eine Kollision zu riskieren.

Ich habe keine Adresse gesehen, die eine GUID als Datenbankschlüssel verwendet, daher dachte ich, es könnte hilfreich sein zu wissen, dass Sie das auch tun können.

Tom Schaefer
quelle
3

GUID steht für "Global Unique Identifier" und Sie verwenden es, wenn Sie einen Globally Unique Identifier haben möchten.

In RSS-Feeds sollten Sie beispielsweise für jedes Element im Feed eine GUID haben. Auf diese Weise kann die Feedreader-Software verfolgen, ob Sie diesen Artikel gelesen haben oder nicht. Ohne eine GUID wäre es unmöglich zu sagen.

Eine GUID unterscheidet sich von einer Datenbank-ID darin, dass unsere GUIDs immer unterschiedlich sind , unabhängig davon, wer ein Objekt erstellt - Sie, ich, der Typ auf der Straße . Es sollten keine Kollisionen mit einer GUID auftreten.

Sie sehen auch den Begriff UUID, der für "Universally Unique Identifier" steht. Es gibt im Wesentlichen keinen Unterschied zwischen den beiden. UUID ist der passendere Begriff. GUID ist der von Microsoft verwendete Begriff.

August
quelle
3

Wenn Sie eine Kennung generieren müssen, die während der gesamten Lebensdauer Ihrer Anwendung eindeutig sein muss, verwenden Sie eine GUID.

Stellen Sie sich vor, Sie haben einen Server mit Sitzungen. Wenn Sie jeder Sitzung eine GUID geben, sind Sie sicher, dass diese für jede Sitzung, die jemals von Ihrem Server erstellt wurde, eindeutig ist. Dies ist nützlich, um Fehler aufzuspüren.

Edouard A.
quelle
3

Eine besonders nützliche Anwendung von GUIDs, die ich gefunden habe, besteht darin, sie zu verwenden, um eindeutige Besucher in Webanwendungen zu verfolgen, bei denen die Besucher anonym sind (dh nicht angemeldet oder registriert sind).

Yalestar
quelle
2

GUID = Global Unique IDentifier.

Verwenden Sie diese Option, wenn Sie etwas in einem globalen Kontext eindeutig identifizieren möchten.

Dieser Generator kann praktisch sein.

Greg Hurlman
quelle
1

Der Wikipedia- Artikel zu GUIDs ist ziemlich klar darüber, wofür sie verwendet werden - vielleicht hilft es, Ihre Frage neu zu formulieren - wofür benötigen Sie eine GUID?

rauben
quelle
"Wofür brauchst du eine GUID?" Ich denke das war die Frage.
Michael Myers