Apakah ada perbedaan antara GUID dan UUID?

866

Saya melihat 2 akronim ini dilemparkan, dan saya bertanya-tanya apakah ada perbedaan antara GUID dan UUID?

Jon Tackabury
sumber
183
Saya bisa mengatakan "GUID", saya tidak bisa mengatakan "UUID".
Hardwareguy
48
Saya mengucapkan UUID sebagai "Anda-wid"
Matt Greer
106
Aku berkata "kamu-kamu-aku-dee", tapi aku bukan penutur asli ...
Wilt
20
Spesifikasi UUID ( RFC-4122 ) mengatakan secara abstrak: Spesifikasi ini mendefinisikan ruang nama Sumber Daya Seragam untuk UUID (Pengidentifikasi Unik Universal), juga dikenal sebagai GUID (Pengidentifikasi Unik Global)
Tom
89
UUID unik secara universal (lingkup-semesta) sedangkan GUID hanya unik secara global (lingkup-dunia). Tidak ada yang unik multiversal, yaitu mereka bukan BANYAK. Ini berarti bahwa pada prinsipnya Anda tidak boleh menggunakan GUIDs secara antarplanet. Selain itu, mereka cukup banyak dipertukarkan.
rsp

Jawaban:

817

The jawaban sederhana adalah: tidak ada perbedaan , mereka adalah hal yang sama. Perlakukan mereka sebagai nilai 16 byte (128 bit) yang digunakan sebagai nilai unik. Dalam Microsoft-Speak mereka disebut GUID, tetapi menyebutnya sebagai UUID ketika tidak menggunakan Microsoft-Speak.

Bahkan penulis spesifikasi UUID dan Microsoft mengklaim mereka adalah sinonim:

  • Dari pengantar IETF RFC 4122 " Pengidentifikasi Unik Universal (UUID) URN Namespace ": "namespace Nama Sumber Daya Seragam untuk UUID (Pengenal Unik Unik), juga dikenal sebagai GUID (Pengidentifikasi Unik Global)."

  • Dari Rekomendasi Internasional ITU-T X.667, Standar Internasional ISO / IEC 9834-8: 2004 : "UUID juga dikenal sebagai Pengidentifikasi Unik Global (GUID), tetapi istilah ini tidak digunakan dalam Rekomendasi ini."

  • Dan Microsoft bahkan mengklaim GUID ditentukan oleh UUID RFC: "Dalam pemrograman Microsoft Windows dan sistem operasi Windows, pengidentifikasi unik global (GUID), sebagaimana ditentukan dalam [RFC4122], adalah ... Istilah pengidentifikasi unik universal (UUID ) terkadang digunakan dalam spesifikasi protokol Windows sebagai sinonim untuk GUID. "

Tetapi jawaban yang benar tergantung pada apa artinya pertanyaan itu ketika mengatakan "UUID" ...

Bagian pertama tergantung pada apa yang dipikirkan penanya ketika mereka mengatakan "UUID".

Klaim Microsoft menyiratkan bahwa semua UUID adalah GUID. Tetapi apakah semua GUID benar-benar UUID? Yaitu, apakah set semua UUID hanya subset yang tepat dari set semua GUID, atau apakah set yang sama persis?

Melihat rincian RFC 4122, ada empat "varian" UUID yang berbeda. Ini sebagian besar karena pengidentifikasi 16 byte tersebut digunakan sebelum spesifikasi tersebut disatukan dalam pembuatan spesifikasi UUID. Dari bagian 4.1.1 dari RFC 4122 , empat varian UUID adalah:

  1. Kompatibilitas mundur, Sistem Komputasi Jaringan
  2. The varian ditentukan dalam RFC 4122 (yang ada lima sub-varian, yang disebut "versi")
  3. Dicadangkan, kompatibilitas mundur Microsoft Corporation
  4. Dicadangkan untuk definisi masa depan.

Menurut RFC 4122, semua varian UUID adalah "UUID nyata", maka semua GUID adalah UUID nyata. Untuk pertanyaan literal "apakah ada perbedaan antara GUID dan UUID" jawabannya pasti tidak untuk RFC 4122 UUID: tidak ada perbedaan (tetapi tergantung pada bagian kedua di bawah).

Tetapi tidak semua GUID adalah varian 2 UUID (mis. Microsoft COM memiliki GUID yang merupakan varian 3 UUID). Jika pertanyaannya adalah "apakah ada perbedaan antara GUID dan varian 2 UUID", maka jawabannya adalah ya - mereka bisa berbeda. Seseorang yang mengajukan pertanyaan mungkin tidak tahu tentang varian dan mereka mungkin hanya memikirkan varian 2 UUID ketika mereka mengatakan kata "UUID" (misalnya mereka secara samar-samar mengetahui alamat MAC + waktu dan bentuk algoritma acak nomor UUID, yang keduanya versi dari varian 2). Dalam hal ini, jawabannya adalah ya berbeda .

Jadi jawabannya, sebagian, tergantung pada apa yang dipikirkan orang yang bertanya ketika mereka mengucapkan kata "UUID". Apakah maksudnya varian 2 UUID (karena itu adalah satu-satunya varian yang mereka ketahui) atau semua UUID?

Bagian kedua tergantung pada spesifikasi mana yang digunakan sebagai definisi UUID.

Jika Anda berpikir itu membingungkan, baca ITU-T X.667 ISO / IEC 9834-8: 2004 yang seharusnya disejajarkan dan sepenuhnya kompatibel secara teknis dengan RFC 4122 . Ini memiliki kalimat tambahan dalam Klausul 11.2 yang mengatakan, "Semua UUID yang sesuai dengan Rekomendasi ini | Standar Internasional harus memiliki bit varian dengan bit 7 dari oktet 7 set ke 1 dan bit 6 dari oktet 7 set ke 0". Yang berarti bahwa hanya varian 2 UUID yang sesuai dengan Standar tersebut (kedua nilai bit itu berarti varian 2). Jika itu benar, maka tidak semua GUID memenuhi UUID ITU-T / ISO / IEC, karena ITID UUU ITU-T / ISO / IEC yang sesuai hanya dapat menjadi nilai varian 2.

Oleh karena itu, jawaban sebenarnya juga tergantung pada spesifikasi UUID yang ditanyakan. Dengan asumsi kita jelas berbicara tentang semua UUID dan bukan hanya varian 2 UUID: tidak ada perbedaan antara GUID dan UUET IETF, tapi ya perbedaan antara GUID dan mematuhi UUID ITU-T / ISO / IEC!

Pengkodean biner bisa berbeda

Ketika dikodekan dalam biner (sebagai lawan dari format teks yang dapat dibaca manusia), GUID dapat disimpan dalam struktur dengan empat bidang berbeda sebagai berikut. Format ini berbeda dari standar UUID hanya dalam urutan byte dari 3 bidang pertama.

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
Hoylen
sumber
35
Lebih informatif daripada jawaban yang dipilih. Saya pikir jawaban yang dipilih adalah jawaban paling sederhana mutlak untuk pertanyaan itu.
New Alexandria
3
Tabel enkode biner yang tertanam dalam jawabannya sangat berguna. Tnx
Luciano
2
'Endianness' sangat penting. Jika Anda menyimpan id sebagai byte, Anda akan mendapatkan hasil yang berbeda dari GUID dan UUID.
Calabacin
Dan bayangkan, makhluk terjebak pada 665 upvotes belaka! Bagaimana saya bisa tidak memperbaiki ini?
Haakon Løtveit
656

GUID adalah implementasi Microsoft dari standar UUID.

Per Wikipedia :

Istilah GUID biasanya mengacu pada penerapan Microsoft terhadap standar Pengenal Unik Dunia (UUID).

Kutipan yang diperbarui dari artikel Wikipedia yang sama:

RFC 4122 sendiri menyatakan bahwa UUID "juga dikenal sebagai GUID". Semua ini menunjukkan bahwa "GUID", sementara awalnya merujuk pada varian UUID yang digunakan oleh Microsoft, telah menjadi hanya nama alternatif untuk UUID ...

bdukes
sumber
40
(G adalah singkatan dari Global)
ted.strauss
487
Sama seperti microsoft untuk mengambil sesuatu yang bekerja di mana-mana (alam semesta) dan membuatnya bekerja dalam subset yang sangat kecil (dunia) :)
Gus
33
Perhatikan bahwa jika Anda ingin mengonversi dari representasi binari GUID Microsoft ke UUID standar, Anda harus membalik endianness dari tiga (dari empat) bidang data pertama sebagaimana dirinci dalam bagian "Penyandian biner" di sini: en.wikipedia.org/ wiki / Globally_unique_identifier
Formulir
87
Inilah sebabnya mengapa astronot tidak diizinkan untuk menginstal Windows di ISS.
intuited
10
@bdukes Sepertinya Wikipedia telah mengubah apa yang Anda sebut sebagai pernyataan mereka. Sekarang berbunyiThe term "GUID" typically refers to various implementations of the universally unique identifier (UUID) standard.
Khadim Ali
13

Tidak juga. GUID lebih Microsoft-sentris sedangkan UUID digunakan lebih luas (misalnya, seperti dalam urn: uuid: skema URN, dan di CORBA).

Mark Cidade
sumber
1
Apa definisi dan efek Microsoft-centricity?
Karl Richter
8

GUID telah lama digunakan di area yang tidak memiliki nilai 128-bit dengan cara yang sama dengan UUID. Misalnya, spesifikasi RSS mendefinisikan GUID sebagai string yang Anda pilih, asalkan unik, dengan atribut "isPermalink" untuk menentukan bahwa nilai yang Anda gunakan hanyalah tautan permanen kembali ke item yang disindikasikan.

Tony Arcieri
sumber
0

GUIDRepresentasi tekstual Microsoft dapat berupa UUID yang dikelilingi oleh dua kurung kurawal {}.

Chris Stryczynski
sumber
6
Ini hanya untuk representasi tekstual dari GUID. Struktur sebenarnya berbeda.
anonim
-2

Satu perbedaan antara GUID di SQL Server dan UUID di PostgreSQL adalah huruf besar; Output SQL Server lebih tinggi sementara output PostgreSQL lebih rendah.

Nilai heksadesimal "a" hingga "f" adalah output sebagai karakter huruf kecil dan tidak sensitif huruf pada input. - rfc4122 # section-3

eezing
sumber