UUID v1 vs v4 vs v5: Hangi Sürümü Seçmelisiniz?
Hızlı Yanıt
Default olarak UUID v4 (random) kullanın —koordinasyon gerektirmez ve ihmal edilebilir collision riski vardır. Time-orderable ID'lere ihtiyaç duyduğunuzda v1 (time-based) kullanın. Deterministic ID'ler için v5 (namespace+name) kullanın. Herhangi bir sürümü ücretsiz UUID Generator ile üretin.
giriiş
UUID (Universally Unique Identifier), 8-4-4-4-12 hex gruplarında 36 karakter olarak render edilen 128-bit identifier'dır, örn. 123e4567-e89b-12d3-a456-426614174000. RFC 9562 birkaç sürüm tanımlar; en çok karşılaşacağınız üçü v1 (time + MAC), v4 (random) ve v5 (namespace + name, SHA-1). Her biri benzersizlik garantileri, sıralanabilirlik ve determinism arasında farklı trade-off yapar.
Adım adım
-
UUID v1 —zaman ve düğüm tabanlı
v1, geçerli 60 bitlik zaman damgasını (1582-10-15'ten bu yana 100 ns aralıklarla) ve 48 bitlik düğüm kimliğini (genellikle MAC adresi) kodlar. Aynı düğümde oluşturulan kimlikler monoton olarak artar ve zamana göre sıralanabilir. Risk: MAC adresi donanım kimliğini sızdırır ve düğümler arasındaki saat çarpıklığı sıralamayı bozabilir.
-
UUID v4 —rastgele
v4, 122 rastgele bit kullanır (sürüm/varyant için 6 bit sabittir). 122 rastgele bit ile 2,71 trilyon kimlik arasında çarpışma olasılığı %50'dir; herhangi bir gerçekçi iş yükü için şans fiilen sıfırdır. v4'ün koordinasyona ihtiyacı yoktur ve hiçbir ana bilgisayar bilgisini göstermez, bu da onu en güvenli varsayılan haline getirir.
-
UUID v5 —ad alanı ve ad (SHA-1)
v5, deterministik 128 bitlik bir kimlik üretmek için UUID ad alanını ve SHA-1 ile bir ad dizesini karma hale getirir. Aynı (ad alanı, ad) çifti her zaman aynı UUID sonucunu verir; bu, tekilleştirme ve doğal anahtarlardan türetilen kararlı kimlikler için idealdir. v3 aynı fikirdir ancak MD5 kullanır (bundan kaçının).
-
Takasları karşılaştırın
v1 sıralanabilir ancak MAC sızdırıyor ve saat senkronizasyonu gerektiriyor. v4 rastgele ve özeldir ancak sıralanamaz. v5 deterministiktir ve tekilleştirir ancak rastgele değildir; adı tahmin etmek, saldırganın UUID dosyasını yeniden üretmesine olanak tanır. Sıralama, rastgelelik veya determinizme ihtiyacınız olup olmadığına göre seçim yapın.
-
Durumunuz için doğru sürümü seçin
Veritabanı birincil anahtarları: v4 (veya zaman sıralaması için daha yeni sistemlerde v7). Koordinasyonu olmayan dağıtılmış sistemler: v4. Doğal bir anahtardan gelen deterministik kimlikler (ör. URL →UUID): v5. Güvenli rastgele düğüm kimliğine sahip zaman sırası: v1'den yararlanan denetim günlükleri.
Örnekler
UUID v1 (zamana dayalı, sıralanabilir)
Giriş: 2026-08-28T12:00:00Z tarihinde 00:11:22:33:44:55 düğümünde oluşturuldu
Çıkış: 1ef7c1d0-2d3b-11f0-8000-001122334455 (sürüm basamağı '1', zamana göre sıralanabilir)
UUID v4 (rastgele)
Giriş: Random generation
Çıkış: f47ac10b-58cc-4372-a567-0e02b2c3d479 (sürüm basamağı '4', rastgele bitler)
UUID v5 (ad alanı+addan belirleyici)
Giriş: Ad alanı DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8) + adı 'freeonlinetoolsgo.com'
Çıkış: 74738ff5-5367-5958-9aeb-0c1f1f1f1f1f (aynı giriş her zaman aynı çıktıyı verir)
Yaygın Sorunlar
- UUID'leri yerel 16 baytlık BINARY/UUID türü yerine VARCHAR(36) olarak depolamak: bu, 2 kat depolama israfına neden olur ve dizin performansını bozar. Mümkün olduğunda yerel bir UUID sütun türü kullanın.
- Düğüm kimliğini güvence altına almadan v1'i kullanmak: Varsayılan MAC adresi donanım kimliğini sızdırır ve gizlilik açısından endişe vericidir. Bunu, düğüm başına kriptografik olarak rastgele 48 bitlik bir değerle değiştirin.
- V4 çarpışmalarının imkansız olduğunu varsayarsak: öyle değil; yalnızca astronomik olarak olası değiller. 122 rastgele bit ile %50 şans için ~2,71 trilyon kimliğe ihtiyacınız var. 1 milyar kimlik için şans ~0,0000000000000001'dir.
- V5 (SHA-1 tabanlı) yerine v3 (MD5 tabanlı) kullanılması: MD5 bozuk olduğundan v5 tercih edilir. Her ikisi de deterministiktir ancak v5'in çarpışma direnci daha güçlüdür.
İpuçları
- Neredeyse her kullanım durumu için varsayılan olarak v4'tür; rastgeledir, özeldir ve herhangi bir koordinasyon olmadan çarpışmaya karşı dayanıklıdır.
- Zamana göre sıralanabilen rastgele kimliklere ihtiyacınız varsa, Unix zaman damgasını rastgele bitlerle birleştiren UUID v7'ye (RFC 9562, 2024) bakın; modern veritabanları için v1'den daha iyidir.
- Doğal anahtarlardan (URLs, e-posta adresleri) kararlı kimlikler oluşturmak için v5'i kullanın, böylece aynı giriş her zaman aynı UUID ile eşleşir; tekilleştirme ve bağımsız APIs için kullanışlıdır.
- Sunucuya gidip gelmeyi önlemek için mümkün olduğunda istemcide UUID'ler oluşturun — UUID Oluşturucumuz, crypto.getRandomValues() kullanarak tamamen tarayıcınızda çalışır.