UUID/ULID Üretici
Benzersiz kimlik üretmek, neredeyse her modern uygulamayı sessizce destekleyen temel operasyonlardan biri — veritabanı birincil anahtarları, servisler arasında logları birbirine bağlayan correlation ID’leri, kullanıcılar arasında çakışmaması gereken dosya adları, API kaynak tanıtıcıları, deduplikasyon tokenları, yeniden deneme güvenli operasyonlar için idempotency anahtarları. Günlük geliştirici kullanımı dar ama sürekli: test fixture’ı doldurmak için birkaç ID üretmek, tek seferlik entegrasyon testi için oturum tokenı üretmek, elle eklenen yeni bir kaynak için benzersiz tanıtıcı üretmek. Bu araç, ihtiyaç her ortaya çıktığında bir Python REPL’i açmaya ya da tek satırlık kabuk scripti yazmaya yerel alternatif.
UUID v4 çoğu geliştiricinin varsayılanı ve bunun iyi bir nedeni var. Her UUID v4 kriptografik olarak güçlü bir kaynaktan çekilen 122 bit rastgelelik içeriyor; bu da dünyanın tüm sistemleri arasında iki özdeş UUID üretme olasılığını yok denecek kadar küçük yapıyor. Format — tirelerle ayrılmış 8‑4‑4‑4‑12 onaltılık karakter — veritabanları, programlama dilleri ve serileştirme formatları arasında evrensel olarak destekleniyor. PostgreSQL’in yerel UUID türü var; MySQL bunları CHAR(36) veya BINARY(16) olarak saklıyor; MongoDB bunları belge ID’si olarak kullanıyor; neredeyse her web framework primary key olarak formatı tanıyor. Varsayılan tanıtıcı seçimi olarak UUID v4 her yerde özel yapılandırma olmadan çalışıyor.
ULID, kronolojik sıralanabilirlik önemli olduğunda anlamlı olan alternatif. Format 26 karakter Crockford Base32; 48 bit zaman damgası ve ardından 80 bit rastgelelik kodluyor. Zaman damgası öneki ULID’lerin dizge olarak saklandığında kabaca kronolojik sıralanması anlamına geliyor — kayıtların doğal sırasının önemli olduğu olay tabloları, denetim logları ve diğer sistemler için son derece yararlı bir özellik. ULID sütunlarındaki veritabanı dizinleri de UUID v4 sütunlarındaki dizinlerden daha verimli olmaya eğilimli; çünkü zamana göre sıralı eklemeler dizini rastgele eklemelerin yaptığı gibi parçalamıyor. Takas, ULID’lerin üretim zamanının kabaca sızdırması; bazen bu bir gizlilik kaygısı.
UUID kullanıp kullanmamaya dair genel bir soru var; bunlara uzanmadan önce düşünmeye değer. Otomatik artan tamsayı ID’ler daha basit, daha küçük, daha hızlı ve veritabanı anahtarları olarak daha verimli; UUID’lerin lehindeki argüman, veritabanı turu olmadan istemci tarafında üretilebilmeleri, kaynak oluşturma hızını ele vermemeleri, koordinasyon olmadan dağıtık sistemlerde oluşturulabilmeleri ve geçerli bir ID’si olan saldırganlar tarafından sayılamamalarına dayanıyor. Farklı projeler bunlara farklı ağırlık veriyor; UUID’ler dağıtık sistemler ve halka açık kaynaklar için anlamlı, tamsayılar operasyonel basitliğin kazandığı yalnızca dahili iş akışları için anlamlı.
Toplu üretim, tam aracı tek‑ID üreticisinden ayıran vaka. Bin sahte kullanıcıyla bir test veritabanı doldurmak, bin UUID gerektiriyor; bunları tek tek yapmak sinir bozucu. Buradaki araç tek toplu işlemde yapılandırılabilir sayılar üretiyor, deduplikasyon yerleşik (UUID v4 çakışmaları herhangi bir pratik toplu boyutta istatistiksel olarak imkânsız ama deduplikasyon adımı, aynı ID’yi yanlışlıkla iki kez istemek gibi programcı hatalarını yakalıyor). Çıktı, SQL ekleme, JSON dizileri, CSV dosyaları veya başka herhangi bir alımlama formatına yapıştırmaya hazır temiz, satır sonuyla ayrılmış bir liste.
Format ve büyük‑küçük harf düşünceleri olmaları gerekenden daha çok önemli; çünkü bunları karıştırmak düzenli bir hata kaynağı. UUID’ler tipik olarak küçük harfle ve tirelerle (8‑4‑4‑4‑12) gösteriliyor; ama büyük harf, tiresiz (32 onaltılık karakter) veya Base64 gibi alternatif formatlarda da görünebiliyor. UUID’leri servisler arasında farklı formatlarda saklamak, mantıksal olarak aynı ID için dize karşılaştırmalarının başarısız olması anlamına geliyor; tireli‑küçük harf kanonik form en güvenli varsayılan ve çoğu modern sistemin beklediği. ULID’ler büyük‑küçük harf duyarsız ama spec’e göre kanonik form büyük harf; küçük harfe çevirmek teknik olarak izinli ama spec örneklerinden ince ince farklı görünen çıktı üretiyor.
- Log ve tracing için correlation ID üretmek.
- Test verisi ve fixture’lar için primary key hazırlamak.
- Seed işlemlerinde benzersiz ID’lerle dataset oluşturmak.
- UI listelerinde geçici client-side key üretmek.
- Zaman sıralı kayıtlar için ULID kullanmak.
- Yük testi ve import pipeline’ları için toplu ID üretmek.
- 1UUID v4 (rastgele) veya ULID (zaman + rastgelelik) seçin.
- 2Kaç adet üretmek istediğinizi belirleyin.
- 3Listeyi üretin ve tek tıkla kopyalayın.
- 4Log, fixture, seed veya script’lere yapıştırın.
- 5İstediğiniz kadar tekrar üretin.