Generador de KSUID - Crear Identificadores Únicos Ordenables
Genere Identificadores Únicos K-Ordenables (KSUIDs) en línea. Cree ID ordenables por tiempo y resistentes a colisiones para sistemas distribuidos y bases de datos al instante.
Generador KSUID
Documentación
Generador de KSUID
Un KSUID (identificador único ordenable por K) es un código de 27 caracteres que se utiliza para etiquetar registros, como filas de bases de datos, entradas de registros o solicitudes de API. Combina una marca de tiempo con datos aleatorios, por lo que los identificadores creados después siempre se ordenan tras los creados antes, aunque cada uno siga siendo prácticamente único. Esta herramienta genera un único KSUID en el navegador y permite copiarlo.
¿De qué se compone un KSUID?
Un KSUID tiene una longitud de 20 bytes, divididos en dos partes:
- Marca de tiempo (4 bytes): número de segundos transcurridos desde un punto de inicio fijo denominado época KSUID.
- Carga útil aleatoria (16 bytes): datos producidos por el generador criptográfico de números aleatorios del navegador.
A continuación, esos 20 bytes se convierten en texto mediante la codificación base62, un sistema que representa los números usando 62 caracteres: los dígitos del 0 al 9, las letras mayúsculas de la A a la Z y las letras minúsculas de la a a la z. El resultado siempre se completa hasta tener exactamente 27 caracteres, por ejemplo, 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Como la marca de tiempo aparece primero, dos KSUID generados con un segundo de diferencia normalmente se ordenarán en el mismo orden que sus tiempos de creación al compararlos como texto plano. Como los últimos 16 bytes son aleatorios, dos KSUID generados en el mismo segundo casi con total seguridad serán diferentes.
Época KSUID
La mayoría de los sistemas informáticos cuentan el tiempo en segundos desde el 1 de enero de 1970 (la «época Unix»). Los KSUID utilizan un punto de inicio diferente, la época KSUID: 1.400.000.000 segundos después de la época Unix, que corresponde al 13 de mayo de 2014, 16:53:20 UTC.
Usar un punto de inicio posterior permite que el campo de marca de tiempo de 4 bytes cubra más años útiles antes de quedarse sin espacio. Un contador de 4 bytes (32 bits) puede contener como máximo 4.294.967.295 segundos. Al contar desde la época KSUID, ese intervalo se agota aproximadamente el 19 de junio de 2150.
Fórmula de un KSUID
Una cadena KSUID se construye en tres pasos.
-
Obtener el valor de la marca de tiempo:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Generar 16 bytes aleatorios,
R, usando un generador de números aleatorios criptográficamente seguro. -
Unir la marca de tiempo de 4 bytes y los 16 bytes aleatorios en un bloque de 20 bytes, y codificar ese bloque en base62, completando el resultado hasta 27 caracteres:
KSUID = Base62( T ‖ R )
Aquí, ‖ significa «colocar uno después del otro». Los bytes de la marca de tiempo siempre aparecen primero, lo que hace que la cadena final se ordene correctamente por tiempo.
Ejemplo paso a paso
Supongamos que la parte de marca de tiempo de un KSUID es 100000000. Como la época KSUID se encuentra 1.400.000.000 segundos después de la época Unix, esta marca de tiempo representa el 14 de julio de 2017, 02:40:00 UTC.
Al combinar esa marca de tiempo con la secuencia de 16 bytes 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (utilizada aquí únicamente para mantener reproducible el ejemplo; un generador real usa bytes aleatorios), la codificación base62 produce:
0qjBBlJIfbVLKwnJn4xpLGDr00e
La cadena tiene 27 caracteres, está formada únicamente por dígitos y letras, y se puede utilizar directamente en una URL o un nombre de archivo.
Cómo utilizar la herramienta generadora de KSUID
- Abrir la página del generador de KSUID.
- Seleccionar el botón «Generar KSUID».
- La herramienta crea un KSUID nuevo usando la hora actual y bytes aleatorios nuevos, y lo muestra en la página.
- Seleccionar el botón «Copiar KSUID» para copiar el valor al portapapeles.
- Seleccionar «Restablecer» para borrar el resultado. El botón Restablecer aparece únicamente después de generar un KSUID.
Cada clic en «Generar KSUID» produce exactamente un identificador. Para crear varios KSUID, hay que volver a hacer clic en el botón para cada uno; la herramienta no incluye un modo por lotes ni una función de exportación de archivos.
El generador utiliza la API Web Crypto integrada en los navegadores modernos. Si esa API no está disponible, la herramienta muestra un error en lugar de producir un identificador, porque un generador de números aleatorios que no sea criptográficamente seguro podría producir identificadores más fáciles de adivinar o que colisionen.
KSUID y UUID: comparación
Un UUID (identificador único universal) es otro formato habitual de identificador. La versión más utilizada, UUID v4, tiene 36 caracteres y está formada casi por completo por bits aleatorios, por lo que dos UUID no ofrecen ninguna pista sobre cuál se creó primero.
Un KSUID se diferencia en tres aspectos:
- Ordenable por tiempo. Los bytes iniciales de la marca de tiempo hacen que la ordenación alfabética simple de las cadenas KSUID también las ordene por tiempo de creación.
- Más corto. Un KSUID tiene 27 caracteres, frente a los 36 de un UUID estándar.
- Sin separadores. Normalmente, un UUID se escribe con guiones (
xxxxxxxx-xxxx-...); un KSUID no contiene ninguno.
Ambos formatos se pueden generar de manera independiente en distintos equipos sin consultar a un servidor central, por lo que evitan el cuello de botella de un contador autoincremental en una base de datos compartida.
Preguntas frecuentes
¿Qué significa KSUID?
K-Sortable Unique Identifier, es decir, identificador único ordenable por K. La «K» hace referencia a que se puede ordenar («más o menos ordenable», según las notas de diseño originales de Segment, la empresa que creó el formato).
¿Cuánto mide un KSUID?
Tiene 27 caracteres, codificados mediante base62 (dígitos del 0 al 9, letras mayúsculas y letras minúsculas).
¿Qué es la época KSUID?
El 13 de mayo de 2014, a las 16:53:20 UTC, que corresponde a 1.400.000.000 segundos después de la época Unix estándar del 1 de enero de 1970.
¿Pueden colisionar dos KSUID?
Es extremadamente improbable. Cada KSUID incluye 16 bytes aleatorios (128 bits), generados mediante un generador de números aleatorios criptográficamente seguro. Incluso al generar muchos KSUID en el mismo segundo, la probabilidad de que dos coincidan por accidente sigue siendo astronómicamente pequeña.
¿Se puede recuperar la hora de creación a partir de un KSUID?
Sí. Los primeros 4 bytes del valor decodificado contienen la marca de tiempo. Al sumar ese número de segundos a la época KSUID se obtiene la hora de creación original.
¿Esta herramienta permite generar muchos KSUID a la vez?
No. La herramienta genera un KSUID por cada clic en el botón «Generar KSUID». No existe un campo para indicar la cantidad, un campo de marca de tiempo personalizada ni una función de exportación o descarga.
¿Es seguro colocar un KSUID en una URL?
Sí. La codificación base62 utiliza únicamente dígitos y letras, por lo que un KSUID no necesita un escape adicional para aparecer en una URL, un nombre de archivo o una clave de base de datos.
Referencias
- Repositorio de KSUID de Segment en GitHub: https://github.com/segmentio/ksuid
- «Generar buenos identificadores únicos», de Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html