UUID - GUID Nedir? Avantajları ve Dezavantajları Nelerdir?
Bu yazıda, UUID tanımından, avantajlarından, dezavantajlarından bahsedeceğiz.
UUID Nedir
UUID (A universally unique identifier (UUID) yaklaşık Türkçe karşılığı, Evrensel Olarak Benzersiz Tanımlayıcı anlamına gelir. GUID (Globally Unique Identifier) ise UUID ile aynı şey olup isimlendirilmesi microsoft teknolojilerinden kaynaklı gelmektedir.
- UUID temelde 128 bit (16 byte) ve 32 hexadecimal (on altılı sayı sistemi) karakterden oluşan, genellikle dört tire "-" ile ayrılmış karakter dizisidir.
UUID örnekleri;
4a81519d-805e-4fbe-b6ee-23ee6a56192e
882f2a2d-835f-48e9-8c15-0f9c924c8a5d
Neden UUID tercih edilebilir? Avantajları nelerdir?
Tahmin Edilmesinin Zor Olması
- UUID, sıralı artışlı tam sayı tipinde (Sequential Increment Integer) bir id değerine göre daha güvenlidir. Bunun sebebi sıralı artışlı değerlerin tahmin edilmesi daha kolaydır.
- Örnek olarak; veritabanındaki verilerimizin ID değerlerinin tam sayı tipinde (integer) olduklarını varsayalım.
Servislere erişimi olan birinin, "5" id değerli user'i veya "5323" id değerli postu alması pek zor olmaz. Hatta döngü kullanarak sıralı bir şekilde (5,6,7...) aldığını da düşünürsek tüm verilere erişebilir. - ID değeri UUID değerli olursa, iki UUID değer arasında sıralı bir artış değeri olmayacaktır. Bundan dolayı tahmin edilmesi çok ama çok daha zor olacak ve veriye erişim konusunda güvenliği arttırmış oluruz.
- "/api/user/{id}" servisimiz olsun ve ilgili servisten belirtilen id değerine bağlı kullanıcıyı getirsin;
- "/api/user/5353" isteğinde, "5353" tam sayı tipindeki id değerli veriyi tahmin edip servisten getirmek kolaydır.
- "/api/user/e92daafd-4158-4c29-b284-b2863641941d" isteğinde "e92daafd-4158-4c29-b284-b2863641941d" UUID değerini tahmin edip servisten getirmek çok daha zordur.
UUID değerlerinin eşsiz olması ve Veri Birleştirmeleri;
- UUID değeri, tamsayı tipteki id değerlerine göre tüm veritabanları ve tablolar arasında eşsiz değerdedir. Böylece veritabanları veya tablolar arasında birleştirmeler yapıldığında ID değerleri arasında çakışma olmayacaktır. Sonuç olarak birleştirme veya veri ekleme işlemleri çok daha kolay olacaktır.
- Örneğin: İki veritabanı arasında kullanıcıları ve buna bağlı ilişkisel tablodaki verileri birleştireceğimizi varsayalım.
- Bu iki veritabanında id değerleri tamsayı olarak tutulduysa birleştirme sırasında bu verilere yeni id değerleri atanmak zorunda kalacağız.
- Buna bağlı ilişkisel tablolara da bunlar yansıtılacağı için bu işlem daha fazla efor gerektirecektir.
- Sadece kullanıcılar değil tüm veritabanı birleştirmelerini düşündüğümüz zaman belki onlarca, yüzlerce tablo olacağı için bu işlem daha da zaman alacaktır.
Diğer Avantajları:
- Uygulamadan veya platform bağımsız olarak UUID üretilebilir.
- Özellikle ilişkisel veri tablolarına veri ekleme (insert) işlemi çok daha kolaydır.
UUID Kullanımı Dezeavantajları
Depolama (Storage)
- Tamsayı değerli ID değerine göre çok daha fazla belleğe ihtiyaç duyar.
- Integer tipli bir id değeri 4 bytes, big-int tipli id değeri 8 bytes yer kaplarken, UUID değeri 16 bytes yer kaplamaktadır.
Hız (Speed)
- Tamsayı (Integer) değerleri, sıralı değerler olduklarından dolayı taranması ve indekslenmesi daha hızlıdır.
- UUID ise sıralı artışlı eklenmediğinden dolayı zorluk oluşturmaktadır. Buna bağlı olarak da, indexlenmedeki bellek artışı da fazladır.
Diğer dezavantajları:
- Sorgularda ve Debugging'de kısmen zorluk yaratır.
- İnsan tarafından okunmasında zorluk yaratması ve sıralı olmayışları
- URL'de uzun görülmeleri.
Gerçekten eşsiz (Unique) mi?
- UUID ( GUID) tanımlaması içinde Unique ifadesi yer alsa da, matematiksel olarak algoritma ile değerin üretilmesinde bu değer çiftleyebilir/tekrar edebilir (duplicate) fakat bu göz ardı edilecek kadar küçük bir olasılıktır.
Çiftleme ihtimali; Versiyon 4 için ele alacak olursak,%50 olasılıkla en az bir çarpışma olması için üretilmesi gereken rastgele versiyon 4 UUID'lerin sayısı 2,71 kentilyondur.
Bu sayı, yaklaşık 85 yıl boyunca saniyede 1 milyar UUID üretmeye ve UUID başına 16 bayt ile toplamda 45 exabyte depolama değerine eşittir. Bu nedenle, Versiyon 4 UUID ile üretilmiş olan 103 trilyon UUID'de bir duplicate (çiftleme) değer bulma olasılığı milyarda birdir.
UUID Formatı
32 hexadecimal karakterden oluşan, 4 tire ile ayrılmış 8-4-4-4-12 formatında, 5 gruplu, toplamda 36 karakterden oluşan karakter dizisidir.
- "cc1f4935-efbe-4d5e-8531-cd113955140b"
- UUID versiyon ve varyant değerleri farklı olsa da tüm UUID formatı aynıdır.
Sonuç
Bu yazıda, UUID tanımından, avantajlarından, dezavantajlarından bahsetmiş olduk.
Daha fazla
UUID Versiyonları ve Varyantları ->

Yararlandığım kaynaklar;
https://en.wikipedia.org/wiki/Universally_unique_identifier
https://datatracker.ietf.org/doc/html/rfc4122
https://stackoverflow.com/questions/45399/advantages-and-disadvantages-of-guid-uuid-database-keys