Generator ULID

Generuj leksykograficznie sortowalne identyfikatory z znacznikiem czasu i losowością

Wypróbuj te przykłady:

Co to jest ULID?

ULID (Uniwersalnie Unikalny Leksykalnie Sortowalny Identyfikator) to format identyfikatora 128-bitowego zaprojektowany, aby przezwyciężyć ograniczenia UUID. Składa się z:

  • Timestamp: 48 bitów precyzji czasu Unix w milisekundach
  • Randomness: 80 bitów kryptograficznie bezpiecznych danych losowych
  • Encoding: reprezentacja Base32 (26 znaków)

Przykład formatu: 01ARZ3NDEKTSV4RRFFQ69G5FAV

Jak działa ULID

  1. Generuj 48 bitów dla znacznika czasu (Unix w milisekundach)
  2. Generuj 80 bitów kryptograficznie bezpiecznych danych losowych
  3. Połącz znacznik czasu (najbardziej znaczący) z losowością (najmniej znaczącą)
  4. Zakoduj całą wartość 128-bitową używając alfabetu Base32 Crockforda
  5. Wynik to 26-znakowy ciąg (pierwsze 10 znaków to znacznik czasu, ostatnie 16 to losowość)

Zalety i uwagi

AdvantagesConsiderations
  • Leksykalnie sortowalny
  • Zestaw znaków bezpieczny dla URL
  • Nie wymaga specjalnego kodowania
  • Case-insensitive
  • Brak problemów z prywatnością
  • Nowszy, mniej powszechnie używany
  • Ograniczone wsparcie bibliotek
  • Brak kompatybilności z UUID
  • Nie można cofnąć się przed 1970

Struktura ULID

ComponentBitsCharactersDescription
Timestamp48 bitów10 znakówZnacznik czasu Unix (ms) zakodowany w Base32
Randomness80 bitów16 znakówLosowe bajty zakodowane w Base32

Porównanie ULID i UUID

FeatureULIDUUID v1UUID v4UUID v7
Size128 bitów128 bitów128 bitów128 bitów
Długość ciągu26 znaków36 znaków36 znaków36 znaków
Time-based
Naturalne sortowanie
Bezpieczny dla URL
Ekspozycja adresu MAC
Komponent losowy
Standard kanoniczny⚠️ Projekt

Typowe zastosowania

  • Klucze główne bazy danych: Indeksy zoptymalizowane pod kątem wydajności
  • Systemy rozproszone: Generowanie bez koordynacji
  • APIs: Czyste, bezpieczne dla URL identyfikatory
  • Dane szeregów czasowych: Natywne porządkowanie chronologiczne
  • Systemy logów: Sortowalne identyfikatory zdarzeń
  • Nowoczesne aplikacje: Gdzie ograniczenia UUID są problematyczne

Dlaczego wybrać ULID?

  • Sortability: Leksykalne sortowanie według czasu utworzenia
  • Bezpieczeństwo URL: Nie wymaga kodowania URL (w przeciwieństwie do UUID z myślnikami)
  • Compactness: 26 znaków vs 36 dla UUID
  • Niezależność od wielkości liter: Redukuje błędy wprowadzania przez użytkownika
  • Monotonicity: Opcjonalne monotoniczne sortowanie w tej samej milisekundzie
  • Brak znaków specjalnych: Prosty, wyłącznie alfanumeryczny format

Najczęściej zadawane pytania

Jak ULID wypada na tle UUID v7?

Oba używają znaczników czasu Unix do sortowania i mają komponenty losowe. Kluczowe różnice to kodowanie (Base32 vs hex), format (26 znaków vs 36) oraz standaryzacja (UUID v7 jest w projekcie specyfikacji RFC).

Czy mogę wyodrębnić czas utworzenia z ULID?

Tak. Pierwsze 10 znaków reprezentuje znacznik czasu Unix z precyzją do milisekundy, który można zdekodować i przekształcić do standardowego formatu daty i czasu.

Czy ULID są kompatybilne z polami UUID w bazie danych?

Nie. ULID używają innego formatu i muszą być przechowywane jako ciągi znaków lub dane binarne, a nie w natywnych typach UUID w bazie danych.

Co to jest monotoniczność w ULID?

Niektóre implementacje ULID oferują opcję monotoniczną, która zapewnia sekwencyjny porządek sortowania nawet w tej samej milisekundzie, zwiększając komponent losowy dla ULID utworzonych w tym samym znaczniku czasu.

Jakiego zestawu znaków używa ULID?

ULID używa kodowania Base32 Crockforda (0-9, A-Z z wyłączeniem I, L, O, U), które zostało zaprojektowane, aby zminimalizować pomyłki i błędy transkrypcji podczas ręcznego odczytu lub wprowadzania identyfikatorów.

Resources

Alfabet Base32 Crockforda

Wartość kodowaniaCharacterNotes
0-90-9Cyfry dziesiętne
10-31A-ZZ wyłączeniem I, L, O, U dla czytelności

Znaki: 0123456789ABCDEFGHJKMNPQRSTVWXYZ

To kodowanie jest nieczułe na wielkość liter podczas dekodowania (ale ULID są zazwyczaj generowane wielkimi literami).