İçeriğe geç
Utilerio

UUID mi, Nano ID mi, ULID mi? Hangi Benzersiz Kimliği Kullanmalısınız

Benzersiz bir kimlik üretmenin üç yolu, her biri farklı bir önceliğe göre optimize edilmiş — evrensellik, kısa URL'ler veya sıralanabilir veritabanı anahtarları.

· 3 dk okuma

Otomatik artan bir tam sayı ID, en basit birincil anahtardır, aynı zamanda en çok sızdıranıdır: ardışık ID'ler kaç satır olduğunu tam olarak ele verir ve /orders/1001'i gören herkesin /orders/1002'yi tahmin etmesine izin verir. Bundan uzaklaştığınızda üç yaygın alternatif vardır ve bunlar birbirinin yerine geçmez — her biri diğerlerinin optimize etmediği bir şeyi optimize eder.

UUID v4: evrensel, ama uzun ve sırasız

Bir UUID v4, 128 bit rastgelelik olup tireler dahil 36 karakter olarak biçimlendirilir (f47ac10b-58cc-4372-a567-0e02b2c3d479). Tüm değer önerisi evrenselliktir: her dil, her veritabanı, her framework onu zaten yerel olarak destekler ve çakışma olasılığı gerçekçi herhangi bir sistem için sıfır kabul edilecek kadar düşüktür.

Ödünleşme boyut ve sıralama düzenidir. Bir URL'ye veya log satırına koymak için 36 karakter çoktur, ve bitler tamamen rastgele olduğu için UUID'ler bir veritabanı indeksine belirli bir sıra olmadan eklenir — bu da zamanla B-tree indekslerini parçalar ve ölçekte yazma performansını düşürür; UUID anahtarlı tablolar için gerçek ve iyi belgelenmiş bir sorundur.

Nano ID: daha kısa, URL-güvenli, aynı rastgelelik

Nano ID, çakışma matematiğine dokunmadan uzunluk sorununu çözer: aynı miktarda entropiyi daha az karaktere sığdırmak için hex'in 16'sı yerine daha büyük bir alfabe (64 karakter) kullanır. Varsayılan 21 karakter uzunluğu, gerçekçi ID hacimleri için UUID v4 ile karşılaştırılabilir bir çakışma olasılığına sahiptir ve alfabe URL-kaçışı gerektiren karakterleri dışladığı için, bir Nano ID doğrudan bir path segmentine veya sorgu parametresine sığar.

Bu onu herkese açık kimlikler için iyi bir seçim yapar — kısa link slug'ları, davet kodları, 36 karakterlik bir UUID'nin beceriksiz görüneceği bir URL'de görünecek her şey.

ULID: tasarım gereği sıralanabilir

Ne UUID ne de Nano ID ne zaman oluşturulduklarını kodlar. ULID kodlar: ilk 10 karakteri Crockford Base32 ile kodlanmış bir milisaniye zaman damgasıdır, ardından 16 karakter rastgelelik gelir — toplam 26. Zaman damgası önce geldiği için ULID'ler oluşturulma sırasına göre alfabetik sıralanır — bu tam olarak bir UUID'nin eksik olduğu ve bir veritabanı birincil anahtarı için en çok önemli olan özelliktir: sırayla eklenen satırlar indekste fiziksel olarak sıralı kalır, bu da bir tablo büyüdükçe yazma performansını düz tutan şeydir.

Yan yana

UUID v4Nano IDULID
Uzunluk36 karakterAyarlanabilir (varsayılan 21)26 karakter
URL-güvenliTirelerle, evetEvetEvet
Oluşturulma zamanına göre sıralanabilirHayırHayırEvet
Standart / yaygın destekEvet (RFC 4122)Büyüyen, npm ekosisteminde standartBüyüyen, açık bir spesifikasyon var

Hangisi, ne için

  • Herkese açık API kaynak ID'leri, davet kodları, kısa slug'lar — Nano ID. Kısa, URL-güvenli, ve kimsenin ona göre sıralama yapması gerekmiyor.
  • Veritabanı birincil anahtarları, olay logları, yüksek hacimde eklenen her şey — ULID. Sıralanabilirlik doğrudan indeks performansını artırır; rastgele bir UUID ise buna aktif olarak zarar verir.
  • Mevcut araçlarla maksimum uyumluluk, ya da diğer her sistemin zaten beklediği bir değerle eşleşmesi gereken bir şey — UUID v4. Her ORM, veritabanı ve API istemcisinin herhangi bir yapılandırma olmadan zaten anladığı budur.

NanoID / ULID Üretici her ikisini de toplu olarak üretir, UUID Oluşturucu ise farklı sistemlerin beklediği biçimlendirme seçenekleriyle (büyük harf, süslü parantez, tire) RFC 4122 durumunu kapsar.