Ano ang ULID?
ULID (Universally Unique Lexicographically Sortable Identifier) ay isang 128-bit na format ng identifier na idinisenyo upang malampasan ang mga limitasyon sa UUIDs. Binubuo ito ng:
- Timestamp: 48 bits ng millisecond precision Unix time
- Randomness: 80 bits ng cryptographically-secure random na data
- Encoding: Base32 na representasyon (26 na karakter)
Halimbawa ng format: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Paano gumagana ang ULID
- Gumawa ng 48 bits para sa timestamp (Unix time sa milliseconds)
- Gumawa ng 80 bits ng cryptographically-secure random na data
- Pagsamahin ang timestamp (pinakamahalaga) sa randomness (pinakamaliit na mahalaga)
- I-encode ang buong 128-bit na halaga gamit ang Crockford's Base32 alphabet
- Ang resulta ay isang 26-character na string (unang 10 karakter ay timestamp, huling 16 ay randomness)
Mga Bentahe at Mga Dapat Isaalang-alang
Advantages | Considerations |
---|---|
|
|
ULID Structure
Component | Bits | Characters | Description |
---|---|---|---|
Timestamp | 48 bits | 10 na karakter | Unix timestamp (ms) na naka-encode sa Base32 |
Randomness | 80 bits | 16 na karakter | Random bytes na naka-encode sa Base32 |
Paghahambing ng ULID vs. UUID
Feature | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Size | 128 bits | 128 bits | 128 bits | 128 bits |
Haba ng string | 26 na karakter | 36 na karakter | 36 na karakter | 36 na karakter |
Time-based | ✅ | ✅ | ❌ | ✅ |
Natural na pagsasaayos | ✅ | ❌ | ❌ | ✅ |
Ligtas sa URL | ✅ | ❌ | ❌ | ❌ |
Paglantad ng MAC address | ❌ | ✅ | ❌ | ❌ |
Random na bahagi | ✅ | ❌ | ✅ | ✅ |
Canonical standard | ❌ | ✅ | ✅ | ⚠️ Draft |
Mga Karaniwang Gamit
- Mga primary key ng database: Mga index na optimized para sa performance
- Distributed systems: Generation na walang koordinasyon
- APIs: Malinis, ligtas sa URL na mga identifier
- Time-series data: Katutubong kronolohikal na pag-aayos
- Mga sistema ng log: Mga sortable na event identifier
- Mga modernong aplikasyon: Kung saan nagiging problema ang mga limitasyon ng UUID
Bakit Piliin ang ULID?
- Sortability: Lexicographically nagsasaayos ayon sa oras ng paglikha
- Ligtas sa URL: Hindi kailangan ng URL encoding (hindi tulad ng UUIDs na may hyphens)
- Compactness: 26 na karakter kumpara sa 36 para sa UUID
- Hindi sensitibo sa case: Nakababawas ng mga error sa input ng user
- Monotonicity: Opsyonal na monotonic sorting sa loob ng parehong millisecond
- Walang espesyal na mga karakter: Simple, alphanumeric lamang na format
Mga Madalas Itanong
Paano ihahambing ang ULID sa UUID v7?
Parehong gumagamit ng Unix timestamps para sa sortability at may mga random na bahagi. Ang mga pangunahing pagkakaiba ay encoding (Base32 vs hex), format (26 na karakter vs 36), at standardization (ang UUID v7 ay nasa draft RFC specification).
Maaari ko bang kunin ang oras ng paglikha mula sa isang ULID?
Oo. Ang unang 10 karakter ay kumakatawan sa millisecond-precision Unix timestamp na maaaring i-decode at i-convert sa karaniwang datetime.
Compatible ba ang mga ULID sa mga UUID database fields?
Hindi. Gumagamit ang ULIDs ng ibang format at kailangang itago bilang mga string o binary data sa halip na sa native UUID database types.
Ano ang monotonicity sa ULIDs?
Ang ilang mga implementasyon ng ULID ay nag-aalok ng monotonic na opsyon na nagsisiguro ng sunud-sunod na sort order kahit sa loob ng parehong millisecond sa pamamagitan ng pag-increment ng random na bahagi para sa mga ULID na ginawa sa parehong timestamp.
Anong character set ang ginagamit ng ULID?
Gumagamit ang ULID ng Crockford's Base32 encoding (0-9, A-Z maliban sa I, L, O, U) na idinisenyo upang mabawasan ang kalituhan at mga error sa transcription kapag binabasa o ini-input nang manu-mano ang mga ID.
Resources
Crockford's Base32 Alphabet
Encoding Value | Character | Notes |
---|---|---|
0-9 | 0-9 | Decimal digits |
10-31 | A-Z | Hindi kasama ang I, L, O, U para sa readability |
Mga karakter: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Ang encoding na ito ay case-insensitive para sa decoding (ngunit karaniwang ginagawa ang ULIDs sa uppercase).