UUID nedir?
Bir UUID (Evrensel Benzersiz Tanımlayıcı), 550e8400-e29b-41d4-a716-446655440000 gibi 36 karakterlik bir dize olarak gösterilen 128 bitlik bir değerdir. Format ve sürüm anlamları v1'den v5'e kadar RFC 4122 ile, daha yeni v6, v7 ve v8 için ise RFC 9562 ile tanımlanır. Bu araç v4 (tamamen rastgele), v1 (zaman damgası + rastgele düğüm kimliği) ve v7 (Unix milisaniye zaman damgası öneki + rastgele son ek, üretim zamanına göre sıralanabilir) üretir — hepsi tarayıcınızda, platformun Web Crypto API'si ile. Hiçbir veri sunucuya gönderilmez.
UUID üretimi nasıl çalışır?
Her sürüm determinizmi, sıralanabilirliği ve entropiyi farklı dengeler. Araç seçiminize göre doğru algoritmayı kullanır:
- v4 (rastgele), tarayıcının
crypto.randomUUID()işlevini çağırır; bu işlev 122 bit kriptografik rastgelelik döner ve 6 sabit bit (sürüm0100ve varyant10) doğru konumlara yerleştirilir. Çakışmalar astronomik düzeyde olasılıksızdır — %50 olasılıkla tek bir tekrara ulaşmak için yaklaşık 2,71 kentilyon v4 UUID üretmek gerekir. - v1 (zaman damgası + düğüm), 60 bitlik Gregoryen zaman damgasını (15-10-1582'den itibaren 100 nanosaniyelik tikler)
time_low/time_mid/time_hi_and_versionalanlarına paketler, sürüm nibble'ını0001yapar, varyant bitleri ayarlı 14 bitlik bir saat dizisi seçer ve multicast biti zorla 1'e çekilmiş 48 bitlik rastgele bir düğüm kimliği kullanır (RFC 4122 §4.5, donanım MAC'i yoksa rastgele düğüm kimliğine açıkça izin verir — multicast biti onu MAC olmayan olarak işaretler). - v7 (sıralanabilir zaman damgası), RFC 9562 §5.7'ye göre önce 48 bitlik big-endian Unix milisaniye zaman damgasını, sonra 4 bitlik sürüm
0111'i, sonra 12 rastgele biti, ardından 2 bitlik varyant10'u ve son olarak 62 rastgele biti daha yerleştirir. Zaman damgası en yüksek anlamlı bitlerde olduğu için v7 UUID'leri üretim sırasında sözlük sırasında sıralanır — başka hiçbir UUID sürümünün ek kodlama olmadan sağlamadığı bir özellik. - Tüm rastgelelik, tarayıcının kriptografik olarak güvenli RNG'si olan
crypto.getRandomValues()'tan gelir. Hem v1 hem v7, aynı saat tiki içinde monotonluk koruması içerir; böylece aynı tikteki iki ardışık çağrıda ikinci değer hâlâ birincinin üzerine sıralanır — bu, milisaniye saatini geride bırakan toplu üretimler için kritiktir. - Üretimden sonra biçimlendirme hattı çalışır. Tireleri kaldırabilir, büyük harfe çevirebilir, değeri süslü parantezlerle çevreleyebilir (
{…}— Microsoft GUID kuralı) veya 16 ham baytı base64 olarak gösterebilirsiniz (22 karakter, padding olmadan). base64 modu diğer biçim seçeneklerini geçersiz kılar çünkü base64 kendi başına bir gösterimdir.
Bu UUID üreticiyi neden kullanmalıyım?
- Hiçbir şey tarayıcınızdan dışarı çıkmaz. Web Crypto API yerel olarak çalışır; sayfa, ilk belge yüklemesinden sonra hiçbir ağ isteği yapmaz. DevTools'u açıp Üret'e tıklayın; Ağ panel sessiz kalacaktır.
- RFC uyumlu çıktı. v4 RFC 4122 §4.4'ü, v1 §4.2 ve §4.5'i, v7 RFC 9562 §5.7'yi izler. Sürüm nibble'ı ve varyant bitleri standartların belirttiği yerlere konur — her UUID, sürümünün standart düzenli ifadesini geçer.
- Veritabanı anahtarları için sıralanabilir v7. Postgres, MySQL veya SQL Server'da kümelenmiş birincil anahtar olarak kullanılan bir v7 UUID, eklemeleri dizine yalnızca eklemeli tutar — sayfa bölünmesi yok, rastgele I/O yok — ve hâlâ küresel olarak benzersizdir. v4 bunu yapamaz çünkü bitleri rastgeledir.
- Hız limiti olmayan toplu üretim. Bir seferde 1, 10, 100 veya 1.000 UUID üretin. Kota yok, kayıt yok — araç sekmenizde çalışır, dolayısıyla sınır bir sağlayıcının API katmanı değil sizin CPU'nuzdur.
UUID’nin yaygın uygulamaları nelerdir?
UUID’ler, bir sistemin merkezî bir otoriteye bağlı olmadan küresel olarak benzersiz bir kimliğe ihtiyacı olduğu her yerde karşımıza çıkar:
- Veritabanı birincil anahtarları. Otomatik artan tam sayılar satır sayısını sızdırır ve sharding'i bozar. UUID'ler shard'lar arasında kararlı, bölgeler arasında güvenli şekilde birleştirilebilir ve (v7 ile) sayfa bölünmesi olmadan B-tree eklemelerini sıcak tutar. Tipik bir uygulama UUID'yi istemci tarafında üretir, INSERT'e koyar ve anahtar için asla sunucuya gidip dönmek zorunda kalmaz.
- İstek korelasyon kimlikleri. HTTP ara katman yazılımı her gelen isteğe bir v4 UUID iliştirir, her span'de günlüğe kaydeder ve aşağı akışa iletir (çoğunlukla
X-Request-Idbaşlığı olarak). Bir müşteri hata bildirdiğinde, destek mühendisi kimliği yapıştırır ve hizmetler ile zaman dilimleri arasındaki tüm istek izi belirsizlik olmadan ortaya çıkar. - Idempotency anahtarları. Ödeme API'leri (Stripe, Adyen, Square), yeniden denenen bir isteğin müşteriyi asla iki kez tahsil etmemesi için
Idempotency-Keybaşlığını kabul eder. İstemci tarafında üretilen bir UUID, anahtarın her mantıksal işlem için benzersiz olduğunu garanti eder — bu API'lerin talep ettiği sözleşme tam olarak budur.
Bir UUID örneği nasıl görünür?
Node.js veya modern bir tarayıcıda, tek satırlık crypto.randomUUID() taze bir v4 UUID döndürür — örneğin 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. Bunu bir istek kimliği veya idempotency anahtarı olarak kullanın. UUID, kümelenmiş birincil anahtar olacak bir veritabanı sütununa gidiyorsa onun yerine v7 üretin: bir milisaniye arayla üretilen iki v7 değeri, örneğin 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 ve 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4, üretim sırasında sözlük sırasında sıralanır. Postgres'in uuid tipi her iki sürümü de aynı şekilde saklar — fark, dizin yazımı sırasında ortaya çıkar: v7 eklemeleri B-tree'nin sağ ucuna eklenirken v4 eklemeleri dağılıp rastgele I/O'yu zorlar.
Bu UUID Üretici tek bir iş yapar: bir tıklamayı, ihtiyacınız olan biçimde, RFC uyumlu bir veya birçok tanımlayıcıya çevirir ve isteğinizi hiçbir sunucuya göndermez. Bir sürüm seçin, bir adet seçin, bir biçim seçin — üretin, kopyalayın, yolunuza devam edin.