ULID Nedir?
ULID (Evrensel Benzersiz Sıralanabilir Tanımlayıcı) UUID'lerdeki sınırlamaları aşmak için tasarlanmış 128 bitlik bir tanımlayıcı formatıdır. Şunlardan oluşur:
- Timestamp: 48 bit milisaniye hassasiyetinde Unix zamanı
- Randomness: 80 bit kriptografik olarak güvenli rastgele veri
- Encoding: Base32 gösterimi (26 karakter)
Format örneği: 01ARZ3NDEKTSV4RRFFQ69G5FAV
ULID nasıl çalışır
- Zaman damgası için 48 bit oluştur (milisaniye cinsinden Unix zamanı)
- 80 bit kriptografik olarak güvenli rastgele veri oluştur
- Zaman damgasını (en anlamlı) rastgelelikle (en az anlamlı) birleştir
- Tüm 128 bitlik değeri Crockford'un Base32 alfabesi ile kodla
- Sonuç 26 karakterlik bir dizedir (ilk 10 karakter zaman damgası, son 16 karakter rastgelelik)
Avantajlar ve Dikkat Edilmesi Gerekenler
Advantages | Considerations |
---|---|
|
|
ULID Yapısı
Component | Bits | Characters | Description |
---|---|---|---|
Timestamp | 48 bit | 10 karakter | Base32 ile kodlanmış Unix zaman damgası (ms) |
Randomness | 80 bit | 16 karakter | Base32 ile kodlanmış rastgele baytlar |
ULID ve UUID Karşılaştırması
Feature | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Size | 128 bit | 128 bit | 128 bit | 128 bit |
Dize uzunluğu | 26 karakter | 36 karakter | 36 karakter | 36 karakter |
Time-based | ✅ | ✅ | ❌ | ✅ |
Doğal sıralama | ✅ | ❌ | ❌ | ✅ |
URL güvenli | ✅ | ❌ | ❌ | ❌ |
MAC adresi açığa çıkması | ❌ | ✅ | ❌ | ❌ |
Rastgele bileşen | ✅ | ❌ | ✅ | ✅ |
Kanonik standart | ❌ | ✅ | ✅ | ⚠️ Taslak |
Yaygın Kullanım Alanları
- Veritabanı birincil anahtarları: Performans optimize edilmiş indeksler
- Dağıtık sistemler: Koordinasyonsuz üretim
- APIs: Temiz, URL güvenli tanımlayıcılar
- Zaman serisi verisi: Yerel kronolojik sıralama
- Kayıt sistemleri: Sıralanabilir olay tanımlayıcıları
- Modern uygulamalar: UUID sınırlamalarının sorunlu olduğu yerler
Neden ULID Seçilmeli?
- Sortability: Oluşturma zamanına göre sözlük sırasına göre sıralar
- URL güvenliği: URL kodlaması gerekmez (UUID'lerdeki tireler gibi)
- Compactness: 26 karakter vs UUID için 36
- Büyük/küçük harf duyarsızlığı: Kullanıcı giriş hatalarını azaltır
- Monotonicity: Aynı milisaniye içinde isteğe bağlı monoton sıralama
- Özel karakter yok: Basit, sadece alfanümerik format
Sıkça Sorulan Sorular
ULID, UUID v7 ile nasıl karşılaştırılır?
Her ikisi de sıralanabilirlik için Unix zaman damgalarını kullanır ve rastgele bileşenlere sahiptir. Temel farklar kodlama (Base32 vs hex), format (26 karakter vs 36) ve standartlaşmadır (UUID v7 taslak RFC spesifikasyonundadır).
ULID'den oluşturma zamanını çıkarabilir miyim?
Evet. İlk 10 karakter milisaniye hassasiyetinde Unix zaman damgasını temsil eder ve standart bir tarih saatine dönüştürülebilir.
ULID'ler UUID veritabanı alanlarıyla uyumlu mu?
Hayır. ULID'ler farklı bir format kullanır ve yerel UUID veritabanı türlerinde değil, dize veya ikili veri olarak saklanmalıdır.
ULID'de monotonluk nedir?
Bazı ULID uygulamaları, aynı zaman damgasında oluşturulan ULID'ler için rastgele bileşeni artırarak aynı milisaniye içinde sıralı sıralama sağlayan monoton bir seçenek sunar.
ULID hangi karakter setini kullanır?
ULID, karışıklığı ve yazım hatalarını en aza indirmek için tasarlanmış Crockford'un Base32 kodlamasını (0-9, A-Z, I, L, O, U hariç) kullanır ve bu kodlama büyük/küçük harf duyarsızdır (ancak ULID'ler genellikle büyük harfle üretilir).
Resources
Crockford'un Base32 Alfabesi
Kodlama Değeri | Character | Notes |
---|---|---|
0-9 | 0-9 | Ondalık rakamlar |
10-31 | A-Z | Okunabilirlik için I, L, O, U hariç tutulmuştur |
Karakterler: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Bu kodlama, çözümleme için büyük/küçük harf duyarsızdır (ancak ULID'ler genellikle büyük harfle oluşturulur).