Generador de Identificadores Únicos Ordenables KSUID
Genera Identificadores Únicos Ordenables por Clave (KSUID) para su uso en sistemas distribuidos, bases de datos y aplicaciones que requieren claves únicas y ordenables por tiempo. Los KSUID combinan una marca de tiempo con datos aleatorios para crear identificadores resistentes a colisiones y ordenables.
Generador de KSUID
Documentación
Generador de KSUID
Introducción
KSUID (Identificador Único Ordenable por K) es un formato de identificador único que ofrece varias ventajas sobre el UUID (Identificador Único Universal) y otros sistemas de identificadores. Esta herramienta te permite generar KSUIDs de manera rápida y sencilla.
¿Qué es un KSUID?
Un KSUID es un identificador ordenable de 20 bytes que consta de:
- Un timestamp de 32 bits (4 bytes)
- 16 bytes de aleatoriedad
Cuando se representa como una cadena, un KSUID se codifica en base62 y tiene 27 caracteres de longitud.
Estructura de un KSUID
La estructura de un KSUID se puede desglosar de la siguiente manera:
-
Timestamp (4 bytes): Esto representa el número de segundos desde la época Unix (1 de enero de 1970, a las 00:00 UTC). El timestamp permite que los KSUIDs sean aproximadamente ordenables por tiempo de generación.
-
Componente Aleatorio (16 bytes): Este es un número aleatorio criptográficamente seguro que garantiza la unicidad incluso cuando se generan múltiples KSUIDs en el mismo segundo.
-
Codificación Base62: Los 20 bytes combinados (timestamp + aleatorio) se codifican utilizando base62 (A-Z, a-z, 0-9) para producir la cadena final de 27 caracteres.
Fórmula de KSUID
Un KSUID se puede representar matemáticamente como:
Donde:
- es el timestamp de 32 bits
- es el componente aleatorio de 128 bits
- denota concatenación
El timestamp se calcula como:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Donde KSUID_epoch es 1400000000 (2014-05-13T16:53:20Z).
Diagrama de Estructura de KSUID
Casos de Uso para KSUIDs
Los KSUIDs son particularmente útiles en los siguientes escenarios:
-
Sistemas Distribuidos: Cuando necesitas identificadores únicos en múltiples servidores o servicios sin coordinación.
-
Datos Ordenables por Tiempo: Cuando deseas ordenar datos por tiempo de creación sin almacenar un timestamp separado.
-
Claves de Base de Datos: Como claves primarias en bases de datos, especialmente en bases de datos distribuidas donde los enteros autoincrementales no son adecuados.
-
Identificadores Seguros para URL: Para crear identificadores cortos, únicos y seguros para URL para recursos en aplicaciones web.
-
Correlación de Registros: Para correlacionar entradas de registro a través de diferentes servicios en una arquitectura de microservicios.
Ventajas de los KSUIDs
Los KSUIDs ofrecen varias ventajas sobre otros sistemas de identificadores:
-
Ordenabilidad: A diferencia de los UUIDs, los KSUIDs se pueden ordenar cronológicamente, lo cual es útil para la indexación de bases de datos y el análisis de registros.
-
Sin Coordinación Requerida: A diferencia de los IDs autoincrementales, los KSUIDs se pueden generar de manera independiente por diferentes servidores sin arriesgar colisiones.
-
Representación Compacta: Con 27 caracteres, los KSUIDs son más compactos que los UUIDs cuando se representan como cadenas.
-
Timestamp Incorporado: El timestamp incorporado permite la ordenación y filtrado basado en el tiempo sin necesidad de un campo de timestamp separado.
-
Seguro para URL: La codificación base62 hace que los KSUIDs sean seguros para su uso en URLs sin codificación adicional.
-
Probabilidad Reducida de Colisiones: El componente aleatorio de 16 bytes hace que las colisiones sean extremadamente improbables, incluso a altas tasas de generación.
Cómo Usar Este Generador
- Ingresa cualquier parámetro adicional si es necesario (por ejemplo, un timestamp personalizado).
- Haz clic en el botón "Generar KSUID" para crear un nuevo KSUID.
- El KSUID generado se mostrará en el campo de salida.
- Puedes generar múltiples KSUIDs repitiendo los pasos 1-3.
- Usa el botón "Copiar" junto a cada KSUID para copiarlo a tu portapapeles.
- Opcionalmente, usa la función "Exportar" para descargar una lista de KSUIDs generados.
Recuerda que cada KSUID es único y debe usarse solo una vez. Genera un nuevo KSUID cada vez que necesites un identificador único.
Ejemplos de Código
Aquí hay ejemplos de generación de KSUIDs en varios lenguajes de programación:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"KSUID generado: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`KSUID generado: ${newId}`)
6
1// Java
2import com.github.ksuid.KsuidGenerator;
3
4public class KsuidExample {
5 public static void main(String[] args) {
6 String newId = KsuidGenerator.generate();
7 System.out.println("KSUID generado: " + newId);
8 }
9}
10
1// C++
2#include <iostream>
3#include <ksuid/ksuid.hpp>
4
5int main() {
6 ksuid::Ksuid newId = ksuid::Ksuid::generate();
7 std::cout << "KSUID generado: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "KSUID generado: #{new_id}"
6
1// PHP
2<?php
3require_once 'vendor/autoload.php';
4
5use Tuupola\KsuidFactory;
6
7$factory = new KsuidFactory();
8$newId = $factory->create();
9echo "KSUID generado: " . $newId . "\n";
10?>
11
1// Go
2package main
3
4import (
5 "fmt"
6 "github.com/segmentio/ksuid"
7)
8
9func main() {
10 newId := ksuid.New()
11 fmt.Printf("KSUID generado: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("KSUID generado: \(newId)")
6
Referencias
- Repositorio de KSUID de Segment: https://github.com/segmentio/ksuid
- "Generando buenos identificadores únicos" por Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- Especificación de KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Comentarios
Haz clic en el aviso de comentarios para comenzar a dar comentarios sobre esta herramienta
Herramientas Relacionadas
Descubre más herramientas que podrían ser útiles para tu flujo de trabajo