Przejdź do treści

Wydajny Generator CUID dla Unikalnych Identyfikatorów w Systemach

Generuj odporne na kolizje unikalne identyfikatory (CUID) dla rozproszonych systemów, baz danych i aplikacji internetowych. Natychmiastowe tworzenie skalowalnych, sortowalnych identyfikatorów.

Generator CUID

Szybko i łatwo generuj identyfikator odporny na kolizje.

Kliknij „Wygeneruj nowy CUID”, aby utworzyć identyfikator.
Kalkulator załadunku...
📚

Dokumentacja

Czym jest CUID?

CUID (unikalny identyfikator odporny na kolizje) to krótki ciąg liter i cyfr służący do oznaczania rekordu, pliku lub zdarzenia, tak aby żadne dwa elementy nie miały tej samej nazwy. To narzędzie generuje CUID2, bieżącą wersję tego formatu, za pomocą biblioteki @paralleldrive/cuid2. Każdy identyfikator ma długość 25 znaków, zawiera wyłącznie małe litery i cyfry oraz jest tworzony w całości w przeglądarce — nic nie jest wysyłane na serwer.

Jak korzystać z generatora CUID

  1. Kliknij Generate New CUID, aby utworzyć identyfikator.
  2. Kliknij Copy to Clipboard, aby go skopiować.
  3. Wklej identyfikator do bazy danych, nazwy pliku lub aplikacji.
  4. Kliknij ponownie przycisk generowania, aby utworzyć kolejny identyfikator. Kolizje między niezależnymi wartościami CUID2 są niezwykle mało prawdopodobne, choć nie są matematycznie niemożliwe.
  5. Kliknij Reset, aby wyczyścić wynik.

Wygenerowany identyfikator jest również przechowywany w adresie URL strony, dzięki czemu można udostępnić lub dodać do zakładek link do wyniku.

Struktura i wzór CUID2

CUID2 jest tworzony w następujący sposób:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

Funkcja skrótu łączy cztery prywatne dane wejściowe: bieżący czas, licznik dla danej sesji, odcisk palca komputera hosta oraz losową entropię. Następnie przetwarza je za pomocą SHA3-512, konwertuje wynik do systemu o podstawie 36 (cyfry 0–9 i litery a-z), po czym zachowuje 24 tych znaków. Losowa początkowa litera zwiększa długość gotowego identyfikatora do 25 znaków, zgodnie z ustawieniem tego narzędzia.

Tylko pierwszy znak występuje samodzielnie: jest to losowa litera umieszczona na początku, aby każdy identyfikator zaczynał się od litery, a nie cyfry. Wiele systemów, na przykład nazwy tabel i kolumn SQL, wymaga, aby identyfikatory zaczynały się od litery, dzięki czemu CUID2 można bezpiecznie stosować jako nazwę niemal wszędzie. Każdy znak po pierwszej literze należy do jednego ciągłego, nieprzejrzystego ciągu tworzącego skrót — nie ma on oddzielnych sekcji.

Ponieważ funkcja skrótu działa tylko w jednym kierunku, żadnej z jej danych wejściowych nie można odzyskać z gotowego identyfikatora. CUID2 nie zawiera możliwego do odzyskania znacznika czasu, licznika ani odcisku palca. Jest to celowy wybór z punktu widzenia prywatności i bezpieczeństwa: sam identyfikator nie może ujawnić, kiedy ani gdzie został utworzony.

Przykład obliczeń

Wygenerowanie identyfikatora za pomocą tego narzędzia może dać następujący wynik:

1vcpuhcj51eomj1o31dnlqopu0
2

W tym przykładzie v jest losową początkową literą, a cpuhcj51eomj1o31dnlqopu0 (24 znaki) stanowi ciało skrótu. Obie części wyglądają inaczej tylko dlatego, że pierwszy znak musi być literą — ciało skrótu może zawierać zarówno litery, jak i cyfry.

Dlaczego systemy używają CUID2

  • Nie jest potrzebna koordynacja. Dowolna maszyna może samodzielnie wygenerować prawidłowy identyfikator bez proszenia centralnego serwera lub bazy danych o następną wartość.
  • Odporność na kolizje. Połączenie czasu, licznika, odcisku palca hosta i losowej entropii sprawia, że jest niezwykle mało prawdopodobne, aby dwie maszyny wygenerowały ten sam identyfikator, nawet przy generowaniu wielu identyfikatorów na sekundę.
  • Przyjazny dla adresów URL. CUID2 używa wyłącznie małych liter i cyfr, więc nie trzeba go kodować przed użyciem w adresie internetowym.
  • Szybkie i prywatne generowanie. Ponieważ to narzędzie uruchamia generator w przeglądarce, identyfikatory są tworzone natychmiast i nigdy nie opuszczają urządzenia.

Identyfikatorów CUID2 nie można sortować według czasu utworzenia. W przeciwieństwie do automatycznie zwiększanej liczby w bazie danych lub starszego formatu CUID (wersja 1), CUID2 ukrywa znacznik czasu wewnątrz skrótu, zamiast przechowywać go w jawnej postaci. Aplikacje, które muszą sortować rekordy według kolejności utworzenia, powinny przechowywać obok identyfikatora osobną kolumnę ze znacznikiem czasu.

CUID2 a UUID i identyfikatory automatycznie zwiększane

CechaCUID2UUID v4Automatyczne zwiększanie
Długość25 znaków36 znaków (z łącznikami)Zmienna (zwykle krótka liczba)
Zestaw znakówMałe litery i cyfryCyfry szesnastkowe i łącznikiCyfry
Wymaga centralnej koordynacjiNieNieTak (sekwencja bazy danych)
Możliwość sortowania według czasu utworzeniaNieNieTak
Przyjazny dla adresów URL bez kodowaniaTakTakTak

CUID2 i UUID v4 rozwiązują ten sam problem: generowanie identyfikatorów bez centralnej koordynacji. CUID2 jest krótszy i używa mniejszego zestawu znaków, dzięki czemu łatwiej go odczytać i wkleić do adresu URL. UUID również można bezpiecznie stosować w adresie internetowym, ponieważ łącznik jest znakiem dozwolonym w adresach URL bez kodowania, ale jest o 11 znaków dłuższy.

Typowe zastosowania

  • Klucze główne w rozproszonych bazach danych, w których wiele serwerów niezależnie wstawia wiersze
  • Identyfikatory żądań lub śledzenia używane do śledzenia jednego działania w wielu mikrousługach
  • Nazwy plików przesyłanych na serwer, aby dwa pliki nigdy nie zastąpiły się nawzajem
  • Identyfikatory sesji lub tokenów w aplikacjach internetowych
  • Identyfikatory wiadomości w kolejkach, takich jak Kafka lub RabbitMQ

Krótka historia

Oryginalny format CUID został wydany przez Erica Elliotta w 2012 roku jako alternatywa dla UUID w aplikacjach rozproszonych. CUID2, opublikowany przez ten sam projekt Paralleldrive, przeprojektowano z wykorzystaniem kryptograficznej funkcji skrótu, usuwając znacznik czasu i licznik, które można było odzyskać i które ujawniała pierwotna wersja. To narzędzie generuje wyłącznie identyfikatory CUID2.

Najczęściej zadawane pytania

Jaka jest różnica między CUID (v1) a CUID2? CUID v1 przechowywał w identyfikatorze jawny znacznik czasu i licznik, dzięki czemu identyfikatory można było sortować, ale ujawniały również, kiedy i ile identyfikatorów utworzono. CUID2 zastępuje te jawne pola jednokierunkową funkcją skrótu, dlatego z identyfikatora nie można odczytać żadnych informacji.

Czy identyfikatory CUID z tego narzędzia można sortować według czasu utworzenia? Nie. CUID2 nie zawiera możliwego do odzyskania znacznika czasu, więc identyfikatorów nie można uporządkować według czasu ich wygenerowania wyłącznie na podstawie ciągu znaków.

Jak długi jest wygenerowany identyfikator i czy można zmienić jego długość? To narzędzie zawsze generuje identyfikatory o długości 25 znaków. Nie oferuje opcji żądania innej długości.

Czy dwie różne maszyny mogą w tym samym czasie wygenerować taki sam identyfikator CUID2? Teoretycznie jest to możliwe, ale w praktyce niezwykle mało prawdopodobne. Każdy identyfikator łączy odcisk palca charakterystyczny dla hosta z losową entropią, dlatego niezależne maszyny z bardzo małym prawdopodobieństwem kiedykolwiek wygenerują ten sam skrót.

Czy to narzędzie wysyła jakiekolwiek dane na serwer? Nie. Identyfikator jest generowany przez kod JavaScript uruchomiony w przeglądarce, z użyciem lokalnego zegara systemowego i losowości udostępnianej przez przeglądarkę. Żadne dane nie są przesyłane.

Czy mogę użyć CUID2 jako klucza głównego bazy danych? Tak. Identyfikatory CUID2 dobrze sprawdzają się jako klucze główne w rozproszonych bazach danych, ponieważ każdy węzeł może wygenerować taki identyfikator bez sprawdzania centralnej sekwencji. Nie są naturalnie sortowane według czasu wstawienia, dlatego aplikacja, która potrzebuje takiej kolejności, powinna przechowywać osobną kolumnę created_at.