Generator KSUID - Creează Identificatori Unici Sortabili
Generează Identificatori Unici Sortabili K (KSUIDs) online. Creează instantaneu ID-uri sortabile în funcție de timp, rezistente la coliziuni pentru sisteme distribuite și baze de date.
Generator KSUID
Documentație
Generator KSUID
Un KSUID (K-Sortable Unique Identifier) este un cod de 27 caractere folosit pentru etichetarea înregistrărilor, cum ar fi rândurile din baze de date, intrările din jurnale sau solicitările API. Combină un marcaj temporal cu date aleatoare, astfel încât ID-urile create mai târziu sunt întotdeauna sortate după cele create mai devreme, chiar dacă fiecare rămâne practic unic. Acest instrument generează un singur KSUID în browser și permite copierea acestuia.
Din ce este alcătuit un KSUID?
Un KSUID are 20 octeți, împărțiți în două părți:
- Marcaj temporal (4 octeți): numărul de secunde de la un punct fix de început numit epoca KSUID.
- Date aleatoare (16 octeți): date produse de generatorul criptografic de numere aleatoare al browserului.
Acei 20 octeți sunt apoi convertiți în text folosind codificarea base62, un sistem care reprezintă numerele folosind 62 caractere: cifrele 0-9, literele majuscule A-Z și literele minuscule a-z. Rezultatul este completat întotdeauna până la exact 27 caractere, de exemplu 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Deoarece marcajul temporal apare primul, două KSUID-uri create la o secundă distanță vor fi în mod normal sortate în aceeași ordine cu momentele creării lor atunci când sunt comparate ca text simplu. Deoarece ultimii 16 octeți sunt aleatori, două KSUID-uri create în aceeași secundă sunt aproape sigur diferite.
Epoca KSUID
Majoritatea sistemelor informatice măsoară timpul în secunde de la 1 ianuarie 1970 (numită „epoca Unix”). KSUID-urile folosesc un alt punct de început, epoca KSUID: 1.400.000.000 secunde după epoca Unix, adică 13 mai 2014, 16:53:20 UTC.
Folosirea unui punct de început mai recent permite câmpului de marcaj temporal de 4 octeți să acopere mai mulți ani utili înainte de a-și epuiza capacitatea. Un contor de 4 octeți (32 biți) poate stoca cel mult 4.294.967.295 secunde. Dacă numărătoarea începe de la epoca KSUID, această perioadă se încheie în jurul datei de 19 iunie 2150.
Formula KSUID
Un șir KSUID este construit în trei pași.
-
Determinarea valorii marcajului temporal:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Generarea a 16 octeți aleatori,
R, folosind un generator de numere aleatoare securizat criptografic. -
Concatenarea marcajului temporal de 4 octeți și a celor 16 octeți aleatori într-un singur bloc de 20 octeți, apoi codificarea blocului în base62 și completarea rezultatului până la 27 caractere:
KSUID = Base62( T ‖ R )
Aici, ‖ înseamnă „așezare unul după altul”. Octeții marcajului temporal apar întotdeauna primii, ceea ce face ca șirul final să fie sortat corect în funcție de timp.
Exemplu rezolvat
Să presupunem că porțiunea de marcaj temporal a unui KSUID este 100000000. Deoarece epoca KSUID este la 1.400.000.000 secunde după epoca Unix, acest marcaj temporal reprezintă 14 iulie 2017, 02:40:00 UTC.
Asocierea acestui marcaj temporal cu secvența de 16 octeți 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (folosită aici doar pentru a menține exemplul reproductibilă; un generator real folosește octeți aleatori) produce prin codificare base62:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Șirul are 27 caractere, alcătuite numai din cifre și litere, și poate fi folosit direct în siguranță într-un URL sau într-un nume de fișier.
Cum se utilizează instrumentul generator KSUID
- Deschideți pagina generatorului KSUID.
- Selectați butonul „Generate KSUID”.
- Instrumentul creează un KSUID nou folosind ora curentă și octeți aleatori noi, apoi îl afișează pe pagină.
- Selectați butonul „Copy KSUID” pentru a copia valoarea în clipboard.
- Selectați „Reset” pentru a șterge rezultatul. Butonul Reset apare numai după generarea unui KSUID.
Fiecare clic pe „Generate KSUID” produce exact un identificator. Pentru a crea mai multe KSUID-uri, faceți clic din nou pe buton pentru fiecare; instrumentul nu are încorporat un mod de procesare în loturi sau de export al fișierelor.
Generatorul se bazează pe Web Crypto API, încorporat în browserele moderne. Dacă acest API nu este disponibil, instrumentul afișează o eroare în loc să producă un ID, deoarece un generator de numere aleatoare care nu este securizat criptografic ar putea produce identificatori mai ușor de ghicit sau care s-ar putea ciocni.
KSUID comparat cu UUID
Un UUID (Universally Unique Identifier) este un format alternativ obișnuit de identificator. Cea mai utilizată versiune, UUID v4, are 36 caractere și este alcătuită aproape în întregime din biți aleatori, astfel încât două UUID-uri nu oferă niciun indiciu despre care a fost creat primul.
Un KSUID diferă în trei privințe:
- Sortare după timp. Octeții marcajului temporal de la început înseamnă că sortarea alfabetică simplă a șirurilor KSUID le sortează și în funcție de momentul creării.
- Mai scurt. Un KSUID are 27 caractere, față de 36 pentru un UUID standard.
- Fără separatori. Un UUID este scris de obicei cu cratime (
xxxxxxxx-xxxx-...); un KSUID nu are astfel de separatori.
Ambele formate pot fi generate independent pe computere diferite, fără verificare cu un server central, astfel încât ambele evită blocajul unui contor cu incrementare automată într-o bază de date partajată.
Întrebări frecvente
Ce înseamnă KSUID? K-Sortable Unique Identifier. „K” se referă la faptul că poate fi sortat („sortabil într-un fel”, conform notițelor originale de proiectare de la Segment, compania care a creat formatul).
Cât de lung este un KSUID? 27 caractere, codificate folosind base62 (cifrele 0-9, litere majuscule și litere minuscule).
Ce este epoca KSUID? 13 mai 2014, 16:53:20 UTC, adică 1.400.000.000 secunde după epoca Unix standard, 1 ianuarie 1970.
Se pot ciocni două KSUID-uri? Este extrem de improbabil. Fiecare KSUID include 16 octeți aleatori (128 biți), generați cu un generator de numere aleatoare securizat criptografic. Chiar și generarea multor KSUID-uri în aceeași secundă lasă o probabilitate astronomic de mică ca două să coincidă accidental.
Pot recupera momentul creării dintr-un KSUID? Da. Primii 4 octeți ai valorii decodificate reprezintă marcajul temporal. Adăugarea acelui număr de secunde la epoca KSUID oferă momentul original al creării.
Acceptă acest instrument generarea mai multor KSUID-uri simultan? Nu. Instrumentul generează un KSUID la fiecare clic pe butonul „Generate KSUID”. Nu există un câmp pentru introducerea cantității, un câmp pentru marcaj temporal personalizat sau o funcție de export/descărcare.
Este sigur să introduc un KSUID într-un URL? Da. Codificarea base62 folosește numai cifre și litere, astfel încât un KSUID nu necesită o codificare suplimentară pentru a apărea într-un URL, într-un nume de fișier sau ca o cheie de bază de date.
Referințe
- Repozitoriul GitHub KSUID al Segment: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" de Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html