ULID Generator

Lumikha ng mga lexicographically sortable identifier na may timestamp at randomness

Subukan ang mga halimbawang ito:

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

  1. Gumawa ng 48 bits para sa timestamp (Unix time sa milliseconds)
  2. Gumawa ng 80 bits ng cryptographically-secure random na data
  3. Pagsamahin ang timestamp (pinakamahalaga) sa randomness (pinakamaliit na mahalaga)
  4. I-encode ang buong 128-bit na halaga gamit ang Crockford's Base32 alphabet
  5. Ang resulta ay isang 26-character na string (unang 10 karakter ay timestamp, huling 16 ay randomness)

Mga Bentahe at Mga Dapat Isaalang-alang

AdvantagesConsiderations
  • Lexicographically sortable
  • URL-safe na character set
  • Walang kailangang espesyal na encoding
  • Case-insensitive
  • Walang mga alalahanin sa privacy
  • Mas bago, hindi pa gaanong ginagamit
  • Limitadong suporta sa library
  • Walang UUID compatibility
  • Hindi maaaring bumalik bago ang 1970

ULID Structure

ComponentBitsCharactersDescription
Timestamp48 bits10 na karakterUnix timestamp (ms) na naka-encode sa Base32
Randomness80 bits16 na karakterRandom bytes na naka-encode sa Base32

Paghahambing ng ULID vs. UUID

FeatureULIDUUID v1UUID v4UUID v7
Size128 bits128 bits128 bits128 bits
Haba ng string26 na karakter36 na karakter36 na karakter36 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 ValueCharacterNotes
0-90-9Decimal digits
10-31A-ZHindi 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).