GUID ve UUID arasında herhangi bir fark var mı?


865

Bu 2 kısaltmanın atıldığını görüyorum ve bir GUID ile UUID arasında herhangi bir fark olup olmadığını merak ediyordum?


183
"GUID" diyebilirim, "UUID" diyemem.
Hardwareguy

48
UUID "you-wid" olarak telaffuz ediyorum
Matt Greer

106
"Sen-sen-ben-dee" diyorum, ama ben anadili değilim ...
Wilt

20
UUID belirtimi ( RFC-4122 ) özette şunları söylüyor: Bu belirtim, GUID'ler (Global Benzersiz Benzersiz Tanımlayıcı) olarak da bilinen UUID'ler (Evrensel Benzersiz Tanımlayıcı) için Tekdüzen Kaynak Adı ad alanını tanımlar
Tom

88
UUID'ler evrensel olarak benzersizdir (evren kapsamı), GUID'ler ise yalnızca global olarak benzersizdir (dünya kapsamı). İkisi de çok evrenli değildir, yani MUID değildirler. Bu, prensip olarak GUID'leri gezegenler arası kullanmamanız gerektiği anlamına gelir. Bunun dışında, hemen hemen değiştirilebilirler.
rsp

Yanıtlar:


816

Basit bir cevabı olduğunu: hiçbir fark , ikisi de aynı şeydir. Onları benzersiz bir değer olarak kullanılan 16 bayt (128 bit) değer olarak kabul edin. Microsoft-konuşmada bunlara GUID'ler denir, ancak Microsoft-konuşma kullanmadığında onlara UUID'ler deyin.

UUID belirtimi ve Microsoft'un yazarları bile eş anlamlı olduklarını iddia ediyorlar:

  • IETF RFC 4122 girişinden " Evrensel Benzersiz Kimlik Tanımlayıcı (UUID) URN Ad Alanı ": "GUU'lar (Küresel Benzersiz Kimlik Tanımlayıcı) olarak da bilinen UUID'ler (Evrensel Benzersiz Kimlik Tanımlayıcı) için Tekdüzen Kaynak Adı ad alanı).

  • Gönderen ITU-T Tavsiyesi X.667, ISO / IEC 9834-8: 2004 Uluslararası Standart : "Uuıdlerin da, bir genel benzersiz (Guıd) olarak bilinir, ancak bu terim, bu Tavsiyede kullanılmaz."

  • Microsoft bile UUID RFC tarafından bir GUID belirtildiğini iddia ediyor : "Microsoft Windows programlamada ve Windows işletim sistemlerinde, [RFC4122] 'de belirtildiği gibi, genel olarak benzersiz bir tanımlayıcı (GUID) ... Evrensel olarak benzersiz tanımlayıcı (UUID) ) bazen Windows protokol belirtimlerinde GUID ile eşanlamlı olarak kullanılır. "

Ancak doğru cevap , "UUID" derken sorunun ne anlama geldiğine bağlıdır ...

İlk bölüm, "UUID" derken askerin ne düşündüğüne bağlıdır.

Microsoft'un iddiası, tüm UUID'lerin GUID'ler olduğunu ima eder. Ancak tüm GUID'ler gerçek UUID'ler midir? Yani, tüm UUID'lerin kümesi tüm GUID'lerin kümesinin sadece uygun bir altkümesi mi yoksa tam olarak aynı küme mi?

RFC 4122'nin ayrıntılarına bakıldığında, dört farklı UUID "varyantı" vardır. Bunun nedeni, bu tip 16 bayt tanımlayıcıların, bu spesifikasyonların bir UUID spesifikasyonunun oluşturulmasında bir araya getirilmesinden önce kullanımda olmasıdır. RFC 4122'nin 4.1.1 bölümünden UUID'nin dört varyantı şunlardır:

  1. Ayrılmış, Network Computing System geriye dönük uyumluluk
  2. Varyant RFC 4122 belirtilen (hangi "versiyonları" denir beş alt varyantları vardır)
  3. Ayrılmış, Microsoft Corporation geriye dönük uyumluluk
  4. İleride tanımlanmak üzere ayrılmıştır.

RFC 4122'ye göre, tüm UUID varyantları "gerçek UUID'ler" dir, ardından tüm GUID'ler gerçek UUID'lerdir. Gerçek soruya "GUID ve UUID arasında herhangi bir fark var mı?" Sorusunun cevabı kesinlikle RFC 4122 UUID'ler için hayır : fark yok (ancak aşağıdaki ikinci bölüme tabi).

Ancak tüm GUID'ler varyant 2 UUID'ler değildir (örn. Microsoft COM, varyant 3 UUID'ler olan GUID'lere sahiptir). Soru "GUID ve varyant 2 UUID'ler arasında herhangi bir fark var mı?" İse, cevap evet olacaktır - farklı olabilirler. Soruyu soran biri muhtemelen varyantları bilmiyor ve sadece "UUID" kelimesini söylediklerinde varyant 2 UUID'leri düşünüyor olabilirler (örneğin, MAC adresi + zamanını ve rasgele sayı algoritma formlarını UUID'den belirsiz bir şekilde biliyorlar. her ikisi de versiyonları arasında varyant 2). Bu durumda, cevap evet farklıdır .

Yani cevap, kısmen, "UUID" kelimesini söylediklerinde kişinin ne düşündüğüne bağlıdır. Varyant 2 UUID (farkında oldukları tek varyant olduğu için) veya tüm UUID'ler mi?

İkinci bölüm, UUID'nin tanımı olarak hangi spesifikasyonun kullanıldığına bağlıdır.

Bunun kafa karıştırıcı olduğunu düşünüyorsanız, RFC 4122 ile hizalanması ve teknik olarak tamamen uyumlu olması gereken ITU-T X.667 ISO / IEC 9834-8: 2004'ü okuyun . 11.2 Fıkrasında ek bir cümle vardır, "Bu Tavsiye Kararına uyan tüm UUID'ler | Uluslararası Standart 7 bit 7 oktet 1 ve 6 6 oktet 0'a ayarlanmıştır. Bu, yalnızca değişken 2 UUID'nin bu standarda uygun olduğu anlamına gelir (bu iki bit değeri değişken 2 anlamına gelir ). Bu doğruysa, tüm GUID'ler ITU-T / ISO / IEC UUID'lere uymaz, çünkü uyumlu ITU-T / ISO / IEC UUID'ler yalnızca değişken 2 değerler olabilir.

Bu nedenle, gerçek cevap aynı zamanda sorunun hangi UUID spesifikasyonunun sorulduğuna da bağlıdır. Varyant 2 UUID'lerden değil, tüm UUID'lerden açıkça bahsettiğimizi varsayarsak: GUID ve IETF'in UUID'leri arasında bir fark yoktur , ancak GUID ile uyumlu ITU-T / ISO / IEC UUID'leri arasında evet farkı vardır !

İkili kodlamalar farklı olabilir

İkili olarak kodlandığında (insan tarafından okunabilen metin formatının aksine), GUID aşağıdaki gibi dört farklı alana sahip bir yapıda saklanabilir . Bu biçim, yalnızca ilk 3 alanın bayt sırasında UUID standardından farklıdır .

Bits  Bytes Name   Endianness  Endianness
                   (GUID)      RFC 4122

32    4     Data1  Native      Big
16    2     Data2  Native      Big
16    2     Data3  Native      Big
64    8     Data4  Big         Big

35
Seçilen cevaptan daha bilgilendirici. Bence seçilen cevap sorunun en basit yanıtıdır.
Yeni İskenderiye

3
Cevaba gömülü ikili kodlama tablosu çok kullanışlıdır. Tnx
Luciano

2
'Endianness' çok önemlidir. Kimliği bayt olarak saklarsanız, GUID ve UUID'den farklı sonuçlar alırsınız.
Calabacin

Ve hayal edin, varlıklar sadece 665 upvotes sıkışmış! Bunu nasıl değerlendiremedim?
Haakon Løtveit

655

GUID, Microsoft'un UUID standardını uygulamasıdır.

Wikipedia Başına :

GUID terimi genellikle Microsoft'un Evrensel Olarak Benzersiz Tanımlayıcı (UUID) standardını uygulamasını ifade eder .

Aynı Wikipedia makalesinden güncellenmiş bir alıntı:

RFC 4122, UUID'lerin "GUID'ler olarak da bilinir" olduğunu belirtir. Tüm bu "GUID", aslında Microsoft tarafından kullanılan bir UUID varyant söz ederken, sadece UUID için alternatif bir isim haline geldiğini göstermektedir ...


39
(The G, Globally anlamına gelir)
ted.strauss

487
Tıpkı microsoft gibi her yerde çalışan bir şey (evren) alıp çok küçük bir alt kümede (dünya) çalışmasını sağlıyor :)
Gus

33
Microsoft'un GUID ikili gösteriminden standart bir UUID'ye dönüştürmek istiyorsanız, buradaki "İkili kodlama" bölümünde ayrıntılı olarak açıklanan ilk üç (dört) veri alanının endianitesini çevirmeniz gerektiğini unutmayın: en.wikipedia.org/ wiki / Globally_unique_identifier
Form

87
Astronotların Windows'u ISS'ye yüklemesine izin verilmemesinin nedeni budur.
intuited

10
@bdukes Wikipedia, ifadeleri olarak adlandırdığınız şeyi değiştirdi. Şimdi okuyorThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali

13

Pek sayılmaz. GUID daha Microsoft merkezli olmakla birlikte, UUID daha yaygın olarak kullanılmaktadır (örneğin, urn: uuid: URN şemasında ve CORBA'da olduğu gibi).


1
Microsoft merkezli yaklaşımın tanımı ve etkisi nedir?
Karl Richter

8

GUID, bir UUID ile aynı şekilde mutlaka 128 bit değerinin olmadığı alanlarda uzun süredir kullanılmaktadır. Örneğin, RSS belirtimi GUID'leri , kullandığınız değerin sendikaya gönderilen öğeye geri döndürülmesi için bir "isPermalink" özniteliğiyle benzersiz olduğu sürece seçtiğiniz herhangi bir dize olarak tanımlar .


0

Microsoft'un GUIDmetinsel temsili, iki kıvırcık parantez ile çevrili bir UUID şeklinde olabilir {}.


6
Bu yalnızca GUID'in metinsel gösterimi içindir. Gerçek yapı farklı.
anonim

-2

SQL Server'da GUID ile PostgreSQL'de UUID arasındaki farklardan biri harf durumu; SQL Server çıktılar üst, PostgreSQL çıktılar daha düşük.

Onaltılı değerler "a" ile "f" arasında küçük harf olarak yazılır ve girdide büyük / küçük harfe duyarlı değildir. - rfc4122 # bölüm-3

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.