UUID'ler: Kapsamlı Rehber
UUID'ler (Evrensel Benzersiz Tanımlayıcılar), merkezi koordinasyon olmadan benzersiz tanımlayıcılar oluşturmak için vazgeçilmezdir. Veritabanı kayıtlarından dağıtık sistemlere kadar her yerde kullanılırlar. Bu rehber, farklı UUID sürümlerini, kullanım durumlarını ve en iyi uygulamalarını kapsar.
UUID Nedir?
UUID (Evrensel Benzersiz Tanımlayıcı), bir standart tarafından tanımlanan 128 bitlik bir sayıdır. Genellikle 32 onaltılık basamak olarak görüntülenir, beş grup halinde tire ile ayrılır: 550e8400-e29b-41d4-a716-446655440000. Bu format, UUID'lerin okunabilir ancak bilgisayarlar için kolayca işlenebilir olmasını sağlar. UUID'lerin temel prensibi, merkezi koordinasyon olmadan benzersizliktir. Geleneksel veritabanı otomatik artış ID'lerinin aksine, merkezi sunucuya danışmadan, hatta çevrimdışıyken bile UUID'ler oluşturabilirsiniz. Çakışma ihtimali inanılmaz derecede küçüktür—pratik olarak sıfır. 103 trilyon sürüm 4 UUID, %50 çakışma şansına ulaşmak için oluşturulmalıdır. Bu özellikler, UUID'leri dağıtık sistemler için ideal kılar. Birden fazla sunucu veya istemci, koordinasyon olmadan UUID'ler oluşturabilir ve çakışma endişesi olmadan birleştirebilirsiniz. Çevrimdışı önce uygulamalar, UUID'leri yerel olarak oluşturabilir ve daha sonra senkronize edebilir. Mikroservis mimarileri, her servisin ID'leri bağımsız olarak oluşturmasına izin verir. UUID'lerin birkaç sürümü vardır, her biri farklı amaçlar için: Sürüm 1 zaman damgası ve MAC adresini kullanır. Sürüm 4 rastgele oluşturulur. Sürüm 5 ad alanı ve isimden oluşturulur (hash ile). Sürüm 3 ve 5 benzerdir ancak farklı hash algoritmaları kullanır (MD5 vs SHA-1). Her sürümün kendine özgü avantajları ve ödünleri vardır. Modern uygulamalarda, UUID v4 en yaygınıdır—basit, güvenli ve iyi desteklenir. UUID v1 gizlilik endişeleri nedeniyle daha az yaygındır (MAC adresi sızar). UUID v5 belirli isimlere dayalı deterministik UUID'ler gerektiğinde kullanılır. UUID'ler tek başına kriptografik olarak güvenli değildir—gizli anahtarlar veya hassas tokenler olarak kullanmayın.
UUID Sürümleri
UUID v1 (Zaman tabanlı): Geçerli zaman damgası ve makinenin MAC adresini birleştirir. Bu, UUID'lerin kronolojik olarak sıralanabilir olmasını ve zaman bilgisi içermesini sağlar. Ancak, MAC adresinin dahil edilmesi gizlilik endişeleri yaratır—UUID'yi oluşturan makineyi tanımlayabilir. Ek olarak, aynı milisaniyede aynı makinede birden fazla UUID oluşturmak çakışma risklerine yol açabilir. Kullanım durumu: Zaman sıralamasının gerekli olduğu ancak gizliliğin endişe edilmediği eski sistemler. UUID v3 ve v5 (İsim tabanlı): Bir ad alanı tanımlayıcısı ve bir ismi alır, bunları birleştirir ve hash'ler. Aynı ad alanı ve isim her zaman aynı UUID'yi üretir—deterministiktir. UUID v3 MD5 kullanır (kırılmış, kaçının). UUID v5 SHA-1 kullanır (daha iyi, v3 yerine kullanın). Kullanım durumu: Belirli girdiler için tutarlı UUID'ler oluşturma (URL'ler, domain adları, isimler). Aynı girdiden aynı UUID'yi yeniden oluşturmanız gerektiğinde kullanışlıdır. UUID v4 (Rastgele): Tamamen rastgele sayılardan oluşturulur (birkaç sürüm bit'i hariç). En basit ve en yaygın kullanılan sürüm. Sıralama yoktur, zaman bilgisi yoktur, gizlilik sızıntısı yoktur. Kriptografik olarak güvenli rastgele sayı üreticileri, pratik olarak benzersizliği garanti eder. Kullanım durumu: Çoğu modern uygulama. Veritabanı birincil anahtarları, oturum ID'leri, izleme tanımlayıcıları, dağıtık sistem kimlikleri. UUID v6, v7, v8 (Yeni sürümler): Bu, UUID standardının yeni düzenlemeleridir. UUID v6, kronolojik sıralamayı iyileştirmek için v1'i yeniden düzenler. UUID v7, Unix zaman damgasını rastgelelikle birleştirir—veritabanı dizinleri için v4'ten daha iyidir. UUID v8, özel uygulamalar için ayrılmıştır. Bu sürümler daha yeni ve henüz yaygın olarak desteklenmemektedir. Çoğu sistem henüz v1, v4, v5 kullanır. Hangi sürümü kullanmalısınız? Çoğu kullanım durumu için UUID v4. Deterministik UUID'lere ihtiyacınız varsa, UUID v5. Zaman sıralamasına ihtiyacınız varsa ve gizlilik önemli değilse, UUID v1 (veya daha iyisi, v7 kullanılabilirse). UUID v3'ten kaçının (MD5 kırılmış). Sürümleri karıştırmayın—uygulama genelinde tutarlı olun.
UUID'ler Ne Zaman Kullanılmalı
UUID'ler belirli senaryolarda mükemmeldir ancak her durum için en iyi seçim değildir. Ne zaman kullanılacağını ve ne zaman basit otomatik artış tam sayılarını kullanacağınızı anlamak önemlidir. UUID'leri şunlar için kullanın: Dağıtık sistemler—birden fazla sunucu veya istemci, koordinasyon olmadan ID'ler oluşturur. Veritabanı birleştirme—farklı veritabanlarından kayıtlar çakışmalar olmadan birleştirilebilir. Çevrimdışı önce uygulamalar—istemciler, çevrimdışıyken kayıtlar oluşturur ve daha sonra senkronize eder. Genel API'ler—iç ID'leri açığa çıkarmak istemezsiniz (otomatik artış sıralı sayılar). Mikroservisler—her servis bağımsızca ID'ler oluşturur. Güvenlik—sıralı ID'ler numaralandırma saldırılarına izin verir (kullanıcı 1, 2, 3...). İstek izleme—benzersiz olay ID'leri için dağıtık kayıt kaydı. Basit tam sayıları şunlar için kullanın: Tek veritabanı uygulamaları—merkezi ID oluşturma iyi çalışır. Performans kritiktir—tam sayılar UUID'lerden daha küçük ve daha hızlıdır. İnsan okunabilirliği önemlidir—"sipariş 1234" "sipariş 550e8400-e29b-41d4-a716-446655440000"den daha anlamlıdır. URL'ler kısa olmalıdır—UUID'ler URL'leri daha uzun yapar. Sıralama önemlidir—otomatik artış ID'leri doğal olarak kronolojiktir. Sadelik tercih edilir—UUID kütüphaneleri ve doğrulama ek karmaşıklık ekler. Hibrit yaklaşımlar da mevcuttur: İç tam sayı ID'leri + genel UUID'ler. Veritabanı, her kayıt için hem bir otomatik artış ID'si (iç kullanım, yabancı anahtarlar) hem de bir UUID (genel API) depolar. UUID'ler + zaman damgaları. UUID v4 kullanın ancak kronolojik sıralama için ayrı bir created_at zaman damgası ekleyin. Kısa UUID'ler. UUID'leri daha kısa temsillere kodlayın (Base62, Base58) URL'ler için. Performans hususları: UUID'ler daha büyüktür (128 bit vs 32/64 bit tam sayılar). Dizin boyutları veritabanlarında daha büyüktür. Rastgele UUID'ler (v4) B-tree dizinlerinde kötü yerleşim özelliği gösterir—sıralı eklemeler (otomatik artış) daha verimlidir. Ancak, çoğu modern veritabanı UUID'leri iyi işler. PostgreSQL'in uuid türü vardır. MySQL, BINARY(16) veya CHAR(36) kullanır. Yönetilen hizmetler (AWS RDS, Google Cloud SQL) milyarlarca UUID'yi verimli bir şekilde işler. Doğru araç, kullanım durumuna bağlıdır. Dağıtık sistemler için UUID'ler mükemmeldir. Basit uygulamalar için, tam sayılar yeterlidir. Hangisini seçerseniz seçin, tutarlı olun—aynı projede UUID'leri ve otomatik artış ID'lerini karıştırmak kafa karışıklığına yol açar.
Aracı Dene
UUID Oluşturucu
Daha Fazla Bilgi
SSS
UUID Oluşturucu
SSS →