Salta al contingut

Generador de KSUID - Crea Identificadors Únics Ordenables

Genera Identificadors Únics K-Ordenables (KSUIDs) en línia. Crea ID ordenables per temps, resistents a col·lisions per a sistemes distribuïts i bases de dades a l'instant.

Generador de KSUID

Calculadora de càrrega...
📚

Documentació

Generador de KSUID

Un KSUID (identificador únic ordenable per K) és un codi de 27 caràcters que s’utilitza per etiquetar registres com ara files de base de dades, entrades de registre o sol·licituds d’API. Combina una marca de temps amb dades aleatòries, de manera que els identificadors creats més tard sempre s’ordenen després dels creats abans, tot i que cadascun continua sent, a efectes pràctics, únic. Aquesta eina genera un únic KSUID al navegador i permet copiar-lo.

De què consta un KSUID?

Un KSUID té una longitud de 20 bytes, dividits en dues parts:

  • Marca de temps (4 bytes): el nombre de segons transcorreguts des d’un punt d’inici fix anomenat època KSUID.
  • Dades aleatòries (16 bytes): dades produïdes pel generador de nombres aleatoris criptogràfics del navegador.

Aquests 20 bytes es converteixen després en text mitjançant la codificació base62, un sistema que representa els nombres amb 62 caràcters: les xifres 0-9, les lletres majúscules A-Z i les lletres minúscules a-z. El resultat sempre s’emplena fins a tenir exactament 27 caràcters, per exemple 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Com que la marca de temps apareix primer, dos KSUID creats amb un segon de diferència normalment s’ordenaran en el mateix ordre que les seves hores de creació quan es comparin com a text sense format. Com que els darrers 16 bytes són aleatoris, dos KSUID creats durant el mateix segon gairebé segur que seran diferents.

Època KSUID

La majoria de sistemes informàtics compten el temps en segons des de 1 de gener del 1970 (l’«època Unix»). Els KSUID utilitzen un punt d’inici diferent, l’època KSUID: 1.400.000.000 segons després de l’època Unix, que correspon al 13 de maig del 2014, a les 16:53:20 UTC.

Utilitzar un punt d’inici posterior permet que el camp de marca de temps de 4 bytes cobreixi més anys útils abans d’esgotar la seva capacitat. Un comptador de 4 bytes (32 bits) pot contenir com a màxim 4.294.967.295 segons. Comptant des de l’època KSUID, aquest període s’esgota aproximadament el 19 de juny del 2150.

Fórmula del KSUID

Una cadena KSUID es construeix en tres passos.

  1. Cal trobar el valor de la marca de temps:

    T = floor(current_unix_time_in_seconds) − 1,400,000,000

  2. Cal generar 16 bytes aleatoris, R, amb un generador de nombres aleatoris segur des del punt de vista criptogràfic.

  3. Cal unir la marca de temps de 4 bytes i els 16 bytes aleatoris en un únic bloc de 20 bytes i codificar aquest bloc en base62, emplenant el resultat fins a 27 caràcters:

    KSUID = Base62( T ‖ R )

Aquí, ‖ vol dir «col·locar l’un darrere de l’altre». Els bytes de la marca de temps sempre apareixen primer, cosa que fa que la cadena final s’ordeni correctament per temps.

Exemple resolt

Suposem que la part de la marca de temps d’un KSUID és 100000000. Com que l’època KSUID és 1.400.000.000 segons després de l’època Unix, aquesta marca de temps correspon al 14 de juliol del 2017, a les 02:40:00 UTC.

Si es combina aquesta marca de temps amb la seqüència de 16 bytes 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (que aquí només s’utilitza per mantenir l’exemple reproduïble; un generador real utilitza bytes aleatoris), la codificació base62 produeix:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Aquesta cadena té 27 caràcters, està formada només per xifres i lletres, i es pot utilitzar directament en un URL o un nom de fitxer.

Com s’utilitza l’eina generadora de KSUID

  1. Obriu la pàgina del generador de KSUID.
  2. Seleccioneu el botó «Generate KSUID».
  3. L’eina crea un KSUID nou utilitzant l’hora actual i bytes aleatoris nous, i el mostra a la pàgina.
  4. Seleccioneu el botó «Copy KSUID» per copiar el valor al porta-retalls.
  5. Seleccioneu «Reset» per esborrar el resultat. El botó «Reset» només apareix després que s’hagi generat un KSUID.

Cada clic a «Generate KSUID» produeix exactament un identificador. Per crear diversos KSUID, feu clic al botó una altra vegada per a cadascun; l’eina no incorpora cap mode de processament per lots ni cap funció d’exportació de fitxers.

El generador utilitza l’API Web Crypto integrada als navegadors moderns. Si aquesta API no està disponible, l’eina mostra un error en lloc de produir un identificador, perquè un generador de nombres aleatoris que no sigui criptogràficament segur podria produir identificadors més fàcils d’endevinar o que coincidissin.

KSUID comparat amb UUID

Un UUID (identificador universalment únic) és un format d’identificador alternatiu habitual. La versió més utilitzada, UUID v4, té 36 caràcters i està formada gairebé completament per bits aleatoris, de manera que dos UUID no donen cap pista sobre quin s’ha creat primer.

Un KSUID es diferencia en tres aspectes:

  • Ordenable per temps. Els seus bytes inicials de marca de temps fan que l’ordenació alfabètica sense format de les cadenes KSUID també les ordeni per hora de creació.
  • Més curt. Un KSUID té 27 caràcters, en comparació amb els 36 d’un UUID estàndard.
  • Sense separadors. Normalment, un UUID s’escriu amb guionets (xxxxxxxx-xxxx-...); un KSUID no en té cap.

Tots dos formats es poden generar independentment en ordinadors diferents sense consultar un servidor central, de manera que tots dos eviten el coll d’ampolla d’un comptador auto incrementable en una base de dades compartida.

Preguntes freqüents

Què vol dir KSUID? Identificador únic ordenable per K. La «K» fa referència al fet que es pot ordenar («una mena d’ordenable» en les notes de disseny originals de Segment, l’empresa que va crear el format).

Quina longitud té un KSUID? 27 caràcters, codificats mitjançant base62 (xifres 0-9, lletres majúscules i lletres minúscules).

Què és l’època KSUID? 13 de maig del 2014, a les 16:53:20 UTC, que correspon a 1.400.000.000 segons després de l’època Unix estàndard de 1 de gener del 1970.

Poden coincidir dos KSUID? És extremadament improbable. Cada KSUID inclou 16 bytes aleatoris (128 bits), generats amb un generador de nombres aleatoris criptogràficament segur. Fins i tot generant molts KSUID durant el mateix segon, la probabilitat que dos coincideixin per accident continua sent astronòmicament petita.

Es pot recuperar l’hora de creació a partir d’un KSUID? Sí. Els primers 4 bytes del valor descodificat corresponen a la marca de temps. Si se suma aquest nombre de segons a l’època KSUID, s’obté l’hora de creació original.

Aquesta eina permet generar molts KSUID alhora? No. L’eina genera un KSUID per cada clic al botó «Generate KSUID». No hi ha cap camp per introduir una quantitat, cap camp de marca de temps personalitzada ni cap funció d’exportació o baixada.

És segur posar un KSUID en un URL? Sí. La codificació base62 utilitza només xifres i lletres, de manera que un KSUID no necessita cap escapament addicional per aparèixer en un URL, un nom de fitxer o una clau de base de dades.

Referències

  1. Repositori de KSUID de Segment a GitHub: https://github.com/segmentio/ksuid
  2. "Generating good unique identifiers" de Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html