UUID Nedir, Nerede Kullanılır?
Bir veritabanında kayıtları numaralandırmanın en basit yolu 1, 2, 3 diye artan sayılardır. Ancak birden fazla sistem aynı anda kayıt üretiyorsa bu numaralar çakışır.
UUID bu sorunu nasıl çözüyor?
UUID, 128 bitlik bir kimliktir ve rastgele üretilir. Olası değer sayısı o kadar büyüktür ki iki ayrı sistemin aynı UUID'yi üretmesi pratikte imkânsız kabul edilir. Bu yüzden merkezî bir numaralandırıcıya ihtiyaç kalmaz.
Nerede kullanılır?
- Dağıtık sistemlerde kayıt kimlikleri
- Dosya ve oturum adları
- API istek takip numaraları
- Tahmin edilmesi istenmeyen bağlantı adresleri
UUID Oluşturucu aracı tarayıcınızın kriptografik rastgele sayı üreticisini kullanır; istediğiniz kadar kimlik üretebilirsiniz.
Neden sıradan bir sayaç yetmiyor?
Tek bir veritabanınız varsa kayıtları 1, 2, 3 diye numaralandırmak yeterlidir. Sorun sistem büyüyünce başlar: iki ayrı sunucu aynı anda kayıt oluşturursa ikisi de aynı numarayı verebilir ve veriler birleştirilirken çakışırlar. UUID bu sorunu ortadan kaldırır; her makine, birbirine hiç sormadan, çakışma ihtimali pratikte sıfır olan bir kimlik üretebilir.
UUID 128 bitlik bir sayıdır ve 8-4-4-4-12 biçiminde onaltılık olarak yazılır. Bu uzayın büyüklüğü sezgiye sığmaz: rastgele üretilen milyarlarca kimlik arasında bile aynısının iki kez çıkma olasılığı ihmal edilebilir düzeydedir.
Sürüm 4 ile sürüm 7 arasındaki fark
En yaygın sürüm olan v4 tamamen rastgeledir. Bu, tahmin edilemez olması açısından iyidir ama bir yan etkisi vardır: art arda üretilen kimlikler birbirinden bağımsız olduğu için veritabanı dizinlerinde dağınık dururlar ve büyük tablolarda yazma performansını düşürebilirler.
v7 bu sorunu çözmek için tasarlandı: kimliğin başına üretim zamanını koyar, gerisini rastgele bırakır. Böylece kimlikler zaman sırasına göre artan bir düzende dizilir ve veritabanı dizini düzenli kalır. Yeni bir proje kuruyorsanız ve kimlikleri veritabanı anahtarı olarak kullanacaksanız v7 genellikle daha iyi seçimdir.
Nerede kullanmalı, nerede kullanmamalı
- Dağıtık sistemlerde kayıt kimliği — merkezî bir sayaca ihtiyaç kalmaz.
- Dosya adı çakışmasını önleme — kullanıcıların yüklediği dosyaları benzersiz adlarla saklamak.
- Oturum ve istek takibi — kayıtlarda bir isteği baştan sona izlemek.
- Geçici bağlantı ve davet kodları — tahmin edilmesi pratikte imkânsızdır.
Buna karşılık UUID'yi kullanıcıya gösterilecek yerlerde kullanmak iyi fikir değildir. Kimse telefonda otuz altı karakterlik bir sipariş numarası okumak istemez. Böyle durumlarda kullanıcıya kısa ve okunabilir bir numara gösterip UUID'yi sistem içinde tutmak daha doğrudur.
Güvenlik açısından bir uyarı
v4 kimlikler rastgeledir ama bu onları otomatik olarak gizli anahtar yapmaz. Parola sıfırlama bağlantısı gibi kritik yerlerde, kimliğin kriptografik olarak güvenli üretildiğinden emin olmalı ve mutlaka bir son kullanma süresi koymalısınız. Bu araçta üretilen kimlikler tarayıcınızın kriptografik rastgele sayı üreticisini kullanır ve hiçbir yere gönderilmez.
Sürümler arasındaki fark
UUID'nin birkaç sürümü vardır ve pratikte ikisi öne çıkar. Sürüm 4 tamamen rastgeledir; en yaygın kullanılan budur ve bu araç da onu üretir. Sürüm 7 ise başına zaman damgası koyar, böylece üretilen kimlikler kabaca kronolojik sırada dizilir.
Bu fark veritabanı başarımında görünür hâle gelir. Rastgele UUID'ler dizinde rastgele yerlere düştüğü için ekleme işlemleri yavaşlar; zaman damgalı olanlar sona eklendiği için bu sorunu yaşatmaz. Küçük ve orta ölçekli işlerde fark hissedilmez, milyonlarca satırlık tablolarda belirleyici olur.
UUID'nin bedeli nedir?
- Otuz altı karakterdir; artan bir tam sayıya göre kat kat fazla yer kaplar.
- İnsan tarafından okunamaz ve telefonda dikte edilemez.
- Sıralı olmadığı için kayıtların oluşturulma sırasını kendiliğinden vermez.
- Dizin boyutunu büyütür, bu da bellek kullanımını artırır.
Bu yüzden UUID her yerde doğru seçim değildir. Kullanıcıya gösterilecek sipariş veya talep numaralarında kısa ve okunur bir değer daha uygundur; UUID'yi sistemin iç kimliği olarak kullanıp dışarıya ayrı bir numara göstermek yaygın ve sağlıklı bir yaklaşımdır.