Gerador de KSUID - Crie Identificadores Únicos Ordenáveis
Gere Identificadores Únicos K-Ordenáveis (KSUIDs) online. Crie IDs ordenáveis por tempo e resistentes a colisões para sistemas distribuídos e bancos de dados instantaneamente.
Gerador de KSUID
Documentação
Gerador de KSUID
Um KSUID (K-Sortable Unique Identifier, ou identificador único ordenável por K) é um código de 27 caracteres usado para identificar registros, como linhas de banco de dados, entradas de log ou solicitações de API. Ele combina um registro de data e hora com dados aleatórios, de modo que os IDs criados depois sempre sejam ordenados após os IDs criados antes, embora cada um continue sendo efetivamente único. Esta ferramenta gera um único KSUID no navegador e permite copiá-lo.
Do que é formado um KSUID?
Um KSUID tem 20 bytes, divididos em duas partes:
- Registro de data e hora (4 bytes): o número de segundos desde um ponto inicial fixo chamado época do KSUID.
- Carga aleatória (16 bytes): dados produzidos pelo gerador de números aleatórios criptográficos do navegador.
Esses 20 bytes são convertidos em texto usando a codificação base62, um sistema que representa números usando 62 caracteres: os dígitos de 0 a 9, as letras maiúsculas de A a Z e as letras minúsculas de a a z. O resultado sempre recebe preenchimento até ter exatamente 27 caracteres, por exemplo, 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Como o registro de data e hora vem primeiro, dois KSUIDs criados com um segundo de diferença normalmente serão ordenados na mesma sequência dos horários de criação quando comparados como texto simples. Como os últimos 16 bytes são aleatórios, dois KSUIDs criados no mesmo segundo ainda têm probabilidade muito alta de serem diferentes.
Época do KSUID
A maioria dos sistemas de computador conta o tempo em segundos desde 1º de janeiro de 1970 (a "época Unix"). Os KSUIDs usam um ponto inicial diferente, a época do KSUID: 1.400.000.000 de segundos após a época Unix, o que corresponde a 13 de maio de 2014, 16:53:20 UTC.
Usar um ponto inicial posterior permite que o campo de registro de data e hora de 4 bytes cubra mais anos úteis antes de ficar sem espaço. Um contador de 4 bytes (32 bits) pode armazenar no máximo 4.294.967.295 segundos. A partir da época do KSUID, esse período se esgota aproximadamente em 19 de junho de 2150.
Fórmula do KSUID
Uma string KSUID é criada em três etapas.
-
Encontre o valor do registro de data e hora:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Gere 16 bytes aleatórios,
R, usando um gerador de números aleatórios criptograficamente seguro. -
Una o registro de data e hora de 4 bytes e os 16 bytes aleatórios em um único bloco de 20 bytes. Em seguida, codifique esse bloco em base62, preenchendo o resultado até 27 caracteres:
KSUID = Base62( T ‖ R )
Aqui, ‖ significa "colocar um após o outro". Os bytes do registro de data e hora vêm sempre primeiro, o que faz a string final ser ordenada corretamente pelo tempo.
Exemplo prático
Suponha que a parte do registro de data e hora de um KSUID seja 100000000. Como a época do KSUID ocorre 1.400.000.000 de segundos após a época Unix, esse registro representa 14 de julho de 2017, 02:40:00 UTC.
Combine esse registro com a sequência de 16 bytes 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (usada aqui apenas para manter o exemplo reproduzível; um gerador real usa bytes aleatórios), e a codificação base62 produz:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Essa string tem 27 caracteres, contém apenas dígitos e letras e pode ser usada diretamente em uma URL ou em um nome de arquivo.
Como usar a ferramenta geradora de KSUID
- Abra a página do gerador de KSUID.
- Selecione o botão "Gerar KSUID".
- A ferramenta cria um novo KSUID usando o horário atual e bytes aleatórios novos e o exibe na página.
- Selecione o botão "Copiar KSUID" para copiar o valor para a área de transferência.
- Selecione "Redefinir" para limpar o resultado. O botão Redefinir aparece somente depois que um KSUID é gerado.
Cada clique em "Gerar KSUID" produz exatamente um identificador. Para criar vários KSUIDs, clique no botão novamente para cada novo identificador; a ferramenta não tem modo em lote nem exportação de arquivo integrada.
O gerador depende da Web Crypto API integrada aos navegadores modernos. Se essa API não estiver disponível, a ferramenta exibirá um erro em vez de produzir um ID, pois um gerador de números aleatórios que não seja criptograficamente seguro pode produzir identificadores mais fáceis de adivinhar ou que colidam.
KSUID em comparação com UUID
Um UUID (Universally Unique Identifier, ou identificador universalmente único) é um formato alternativo comum de identificador. A versão mais usada, UUID v4, tem 36 caracteres e é composta quase inteiramente por bits aleatórios, portanto dois UUIDs não fornecem nenhuma indicação de qual foi criado primeiro.
Um KSUID difere em três aspectos:
- Ordenação por tempo. Seus bytes iniciais de registro de data e hora fazem com que a ordenação alfabética simples das strings KSUID também as ordene pelo horário de criação.
- Menor comprimento. Um KSUID tem 27 caracteres, em comparação com 36 de um UUID padrão.
- Sem separadores. Um UUID normalmente é escrito com hífens (
xxxxxxxx-xxxx-...); um KSUID não tem nenhum.
Os dois formatos podem ser gerados de forma independente em computadores diferentes, sem consultar um servidor central. Assim, ambos evitam o gargalo de um contador com incremento automático em um banco de dados compartilhado.
Perguntas frequentes
O que significa KSUID?
K-Sortable Unique Identifier, ou identificador único ordenável por K. O "K" se refere ao fato de ele ser ordenável ("kind of sortable", ou "mais ou menos ordenável", nas notas de projeto originais da Segment, empresa que criou o formato).
Qual é o comprimento de um KSUID?
27 caracteres, codificados usando base62 (dígitos de 0 a 9, letras maiúsculas e letras minúsculas).
O que é a época do KSUID?
13 de maio de 2014, 16:53:20 UTC, que corresponde a 1.400.000.000 de segundos após a época Unix padrão de 1º de janeiro de 1970.
Dois KSUIDs podem colidir?
É extremamente improvável. Cada KSUID inclui 16 bytes aleatórios (128 bits), gerados com um gerador de números aleatórios criptograficamente seguro. Mesmo gerando muitos KSUIDs no mesmo segundo, a chance de dois coincidirem por acaso continua sendo astronomicamente pequena.
É possível recuperar o horário de criação a partir de um KSUID?
Sim. Os primeiros 4 bytes do valor decodificado correspondem ao registro de data e hora. Somar esse número de segundos à época do KSUID fornece o horário de criação original.
Esta ferramenta permite gerar muitos KSUIDs de uma vez?
Não. A ferramenta gera um KSUID a cada clique no botão "Gerar KSUID". Não há campo para informar uma quantidade, campo de registro de data e hora personalizado nem recurso de exportação ou download.
É seguro colocar um KSUID em uma URL?
Sim. A codificação base62 usa apenas dígitos e letras, portanto um KSUID não precisa de escape adicional para aparecer em uma URL, em um nome de arquivo ou em uma chave de banco de dados.
Referências
- Repositório do KSUID da Segment no GitHub: 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