Generatore KSUID - Crea Identificatori Unici Ordinabili
Genera Identificatori Unici K-Ordinabili (KSUID) online. Crea ID ordinabili per tempo, resistenti alle collisioni per sistemi distribuiti e database istantaneamente.
Generatore KSUID
Documentazione
Generatore di KSUID
Un KSUID (K-Sortable Unique Identifier, identificatore univoco ordinabile per chiave) è un codice di 27 caratteri usato per etichettare record come righe di database, voci di log o richieste API. Combina un timestamp con dati casuali, perciò gli ID creati più tardi vengono sempre ordinati dopo quelli creati prima, anche se ciascuno rimane di fatto univoco. Questo strumento genera un singolo KSUID nel browser e consente di copiarlo.
Da cosa è composto un KSUID?
Un KSUID è lungo 20 byte, suddivisi in due parti:
- Timestamp (4 byte): il numero di secondi trascorsi da un punto di partenza fisso chiamato epoca KSUID.
- Payload casuale (16 byte): dati prodotti dal generatore crittografico di numeri casuali del browser.
Questi 20 byte vengono poi convertiti in testo usando la codifica base62, un sistema che rappresenta i numeri con 62 caratteri: le cifre 0-9, le lettere maiuscole dalla A alla Z e le lettere minuscole dalla a alla z. Il risultato viene sempre riempito fino a raggiungere esattamente 27 caratteri, per esempio 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Poiché il timestamp viene prima, due KSUID creati a distanza di un secondo vengono normalmente ordinati nello stesso ordine dei relativi orari di creazione quando vengono confrontati come semplice testo. Poiché gli ultimi 16 byte sono casuali, due KSUID creati nello stesso secondo sono comunque quasi certamente diversi.
Epoca KSUID
La maggior parte dei sistemi informatici conta il tempo in secondi a partire da 1 gennaio 1970 (la "epoca Unix"). I KSUID usano un punto di partenza diverso, l'epoca KSUID: 1.400.000.000 secondi dopo l'epoca Unix, cioè 13 maggio 2014, 16:53:20 UTC.
Usare un punto di partenza più recente consente al campo timestamp di 4 byte di coprire un numero maggiore di anni utili prima di esaurire lo spazio disponibile. Un contatore di 4 byte (32 bit) può contenere al massimo 4.294.967.295 secondi. A partire dall'epoca KSUID, questo intervallo di tempo termina intorno a 19 giugno 2150.
Formula del KSUID
Una stringa KSUID viene costruita in tre passaggi.
-
Determinare il valore del timestamp:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Generare 16 byte casuali,
R, usando un generatore di numeri casuali crittograficamente sicuro. -
Unire il timestamp di 4 byte e i 16 byte casuali in un unico blocco di 20 byte, quindi codificare il blocco in base62, riempiendo il risultato fino a 27 caratteri:
KSUID = Base62( T ‖ R )
Qui ‖ significa "mettere uno dopo l'altro". I byte del timestamp vengono sempre per primi; è questo che fa sì che la stringa finale venga ordinata correttamente in base al tempo.
Esempio di calcolo
Supponiamo che la parte del timestamp di un KSUID sia 100000000. Poiché l'epoca KSUID è 1.400.000.000 secondi dopo l'epoca Unix, questo timestamp rappresenta 14 luglio 2017, 02:40:00 UTC.
Associando quel timestamp alla sequenza di 16 byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (usata qui solo per rendere riproducibile l'esempio; un generatore reale usa invece byte casuali), la codifica base62 produce:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Questa stringa è lunga 27 caratteri, contiene solo cifre e lettere ed è sicura da usare direttamente in un URL o in un nome di file.
Come usare lo strumento generatore di KSUID
- Aprire la pagina del generatore di KSUID.
- Selezionare il pulsante "Generate KSUID".
- Lo strumento crea un nuovo KSUID usando l'ora corrente e nuovi byte casuali, quindi lo visualizza nella pagina.
- Selezionare il pulsante "Copy KSUID" per copiare il valore negli appunti.
- Selezionare "Reset" per cancellare il risultato. Il pulsante Reset compare solo dopo che è stato generato un KSUID.
Ogni clic su "Generate KSUID" produce esattamente un identificatore. Per creare più KSUID, fare nuovamente clic sul pulsante per ciascuno; lo strumento non dispone di una modalità batch né di un'esportazione su file.
Il generatore si basa sulla Web Crypto API integrata nei browser moderni. Se l'API non è disponibile, lo strumento mostra un errore invece di produrre un ID, perché un generatore di numeri casuali non crittograficamente sicuro potrebbe produrre identificatori più facili da indovinare o soggetti a collisioni.
KSUID a confronto con UUID
Un UUID (Universally Unique Identifier, identificatore universalmente univoco) è un formato alternativo comune per gli identificatori. La versione più usata, UUID v4, è lunga 36 caratteri ed è composta quasi interamente da bit casuali, quindi due UUID non forniscono alcun indizio su quale sia stato creato per primo.
Un KSUID differisce in tre aspetti:
- Ordinabile per tempo. I byte iniziali del timestamp fanno sì che l'ordinamento alfabetico semplice delle stringhe KSUID le ordini anche in base all'ora di creazione.
- Più corto. Un KSUID è composto da 27 caratteri, rispetto ai 36 di un UUID standard.
- Senza separatori. Un UUID viene normalmente scritto con trattini (
xxxxxxxx-xxxx-...); un KSUID non ne contiene.
Entrambi i formati possono essere generati indipendentemente su computer diversi senza verifiche con un server centrale, evitando così il collo di bottiglia di un contatore autoincrementante in un database condiviso.
Domande frequenti
Cosa significa KSUID? K-Sortable Unique Identifier. La "K" si riferisce al fatto che è ordinabile ("kind of sortable", cioè "in qualche modo ordinabile", negli appunti di progettazione originali di Segment, l'azienda che ha creato il formato).
Quanto è lungo un KSUID? 27 caratteri, codificati usando base62 (cifre 0-9, lettere maiuscole e lettere minuscole).
Qual è l'epoca KSUID? 13 maggio 2014, 16:53:20 UTC, cioè 1.400.000.000 secondi dopo l'epoca Unix standard del 1 gennaio 1970.
Due KSUID possono entrare in collisione? È estremamente improbabile. Ogni KSUID include 16 byte casuali (128 bit), generati con un generatore di numeri casuali crittograficamente sicuro. Anche generando molti KSUID nello stesso secondo, la probabilità che due coincidano per caso rimane astronomicamente bassa.
È possibile recuperare l'ora di creazione da un KSUID? Sì. I primi 4 byte del valore decodificato costituiscono il timestamp. Aggiungendo quel numero di secondi all'epoca KSUID si ottiene l'ora originale di creazione.
Questo strumento supporta la generazione simultanea di molti KSUID? No. Lo strumento genera un KSUID per ogni clic sul pulsante "Generate KSUID". Non sono disponibili un campo per la quantità, un campo per un timestamp personalizzato né una funzione di esportazione o download.
È sicuro inserire un KSUID in un URL? Sì. La codifica base62 usa solo cifre e lettere, quindi un KSUID non richiede alcun ulteriore escape per comparire in un URL, in un nome di file o in una chiave di database.
Riferimenti
- Repository GitHub di KSUID di Segment: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" di Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html