Apa itu ULID?
ULID (Universally Unique Lexicographically Sortable Identifier) adalah format pengenal 128-bit yang dirancang untuk mengatasi keterbatasan UUID. Ini terdiri dari:
- Timestamp: 48 bit waktu Unix dengan presisi milidetik
- Randomness: 80 bit data acak yang aman secara kriptografis
- Encoding: Representasi Base32 (26 karakter)
Contoh format: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Cara kerja ULID
- Hasilkan 48 bit untuk timestamp (waktu Unix dalam milidetik)
- Hasilkan 80 bit data acak yang aman secara kriptografis
- Gabungkan timestamp (paling signifikan) dengan randomness (paling tidak signifikan)
- Encode seluruh nilai 128-bit menggunakan alfabet Base32 Crockford
- Hasilnya adalah string 26 karakter (10 karakter pertama adalah timestamp, 16 terakhir adalah randomness)
Keuntungan & Pertimbangan
Advantages | Considerations |
---|---|
|
|
Struktur ULID
Component | Bits | Characters | Description |
---|---|---|---|
Timestamp | 48 bit | 10 karakter | Unix timestamp (ms) yang di-encode dalam Base32 |
Randomness | 80 bit | 16 karakter | Byte acak yang di-encode dalam Base32 |
Perbandingan ULID vs. UUID
Feature | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Size | 128 bit | 128 bit | 128 bit | 128 bit |
Panjang string | 26 karakter | 36 karakter | 36 karakter | 36 karakter |
Time-based | ✅ | ✅ | ❌ | ✅ |
Pengurutan alami | ✅ | ❌ | ❌ | ✅ |
Aman untuk URL | ✅ | ❌ | ❌ | ❌ |
Eksposur alamat MAC | ❌ | ✅ | ❌ | ❌ |
Komponen acak | ✅ | ❌ | ✅ | ✅ |
Standar kanonik | ❌ | ✅ | ✅ | ⚠️ Draft |
Kasus Penggunaan Umum
- Kunci utama database: Indeks yang dioptimalkan untuk performa
- Sistem terdistribusi: Pembuatan tanpa koordinasi
- APIs: Pengidentifikasi bersih dan aman untuk URL
- Data deret waktu: Pengurutan kronologis asli
- Sistem log: Pengidentifikasi acara yang dapat diurutkan
- Aplikasi modern: Tempat keterbatasan UUID menjadi masalah
Mengapa Memilih ULID?
- Sortability: Mengurutkan secara leksikografis berdasarkan waktu pembuatan
- Keamanan URL: Tidak perlu encoding URL (berbeda dengan UUID yang menggunakan tanda hubung)
- Compactness: 26 karakter vs 36 untuk UUID
- Tidak peka huruf besar/kecil: Mengurangi kesalahan input pengguna
- Monotonicity: Pengurutan monoton opsional dalam milidetik yang sama
- Tidak ada karakter khusus: Format sederhana hanya alfanumerik
Pertanyaan yang Sering Diajukan
Bagaimana ULID dibandingkan dengan UUID v7?
Keduanya menggunakan Unix timestamps untuk pengurutan dan memiliki komponen acak. Perbedaan utama adalah encoding (Base32 vs hex), format (26 karakter vs 36), dan standardisasi (UUID v7 masih dalam spesifikasi RFC draft).
Bisakah saya mengekstrak waktu pembuatan dari ULID?
Ya. 10 karakter pertama mewakili Unix timestamp dengan presisi milidetik yang dapat didekode dan diubah menjadi datetime standar.
Apakah ULID kompatibel dengan field database UUID?
Tidak. ULID menggunakan format berbeda dan harus disimpan sebagai string atau data biner, bukan dalam tipe database UUID asli.
Apa itu monotonicity dalam ULID?
Beberapa implementasi ULID menawarkan opsi monotonik yang memastikan urutan pengurutan berurutan bahkan dalam milidetik yang sama dengan menambah komponen acak untuk ULID yang dibuat dalam timestamp yang sama.
Set karakter apa yang digunakan ULID?
ULID menggunakan encoding Base32 Crockford (0-9, A-Z kecuali I, L, O, U) yang dirancang untuk meminimalkan kebingungan dan kesalahan transkripsi saat ID dibaca atau dimasukkan secara manual.
Resources
Alfabet Base32 Crockford
Nilai Encoding | Character | Notes |
---|---|---|
0-9 | 0-9 | Digit desimal |
10-31 | A-Z | Mengecualikan I, L, O, U untuk keterbacaan |
Karakter: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Encoding ini tidak peka huruf besar/kecil untuk decoding (tetapi ULID biasanya dihasilkan dalam huruf besar).