Este site é traduzido automaticamente para vários idiomas usando software desenvolvido por Kohei Koyanagi. Consulte o original em inglês para maior precisão.

Abordagem de Identificador Duplo do Splync: UUID e Int Auto-Incrementado

Splync Usa Dois Identificadores para IDs Sensíveis

No banco de dados do Splync, cada usuário — e cada projeto — é identificado por dois IDs diferentes: um UUID e um inteiro auto-incrementado. O inteiro auto-incrementado é o que a maioria das pessoas conhece — é apenas um contador: 1, 2, 3 e assim por diante. O Splync usa esses inteiros no banco de dados do servidor para organizar quase todas as tabelas porque são simples, rápidos e eficientes para junções. Contudo, nunca expomos esses números internos ao aplicativo. Por exemplo, se você fosse o 42º usuário a se cadastrar, seu ID interno no banco de dados seria 42. Mas seu app iOS nunca vê "42". Em vez disso, o aplicativo usa um UUID para representá-lo. Aplicamos a mesma abordagem aos projetos — um ID de projeto pode ser "7" no banco de dados, mas o aplicativo sempre se refere a ele usando um longo UUID.

O Que É um UUID

UUID significa Identificador Universalmente Único. O Splync usa UUIDs versão 4, variante 1, em conformidade com o RFC 4122 — um dos padrões mais amplamente adotados. É uma string gerada aleatoriamente, que se parece com 949ca11c-a6ed-48a3-b40a-fa9727494917. Um UUID é geralmente escrito como 32 caracteres hexadecimais divididos em cinco seções separadas por hífens. Ele é projetado para ser globalmente único, o que significa que não colidirá mesmo em servidores ou bancos de dados diferentes. Matematicamente, há cerca de 16^32 = 2^128 combinações possíveis. No entanto, como seis bits são reservados para indicar a variante e a versão, o número total de UUIDs distintos versão-4, variante-1 é aproximadamente 2^122, ou cerca de 5,3 x 10^36 — um número astronomicamente grande que garante unicidade prática.

Quão Pequeno É 1 / 5.300.000.000.000.000.000.000.000.000.000.000.000

Cada par de UUIDv4s tem cerca de 1 em 5,3 × 10^36 chance de coincidirem. Esse número é tão pequeno que quase se recusa a existir na imaginação humana. Para visualizá-lo, imagine jogar 47 dados de uma vez. As chances de obter todos uns — cada dado mostrando “1” — é de cerca de 1 em 6^47, ou aproximadamente 1 em 3,7 × 10^36. Essa é a mesma ordem de grandeza de uma colisão de UUID. Agora, imagine cada pessoa na Terra — cerca de oito bilhões de nós — jogando esses 47 dados a cada milissegundo por um trilhão de anos. Isso dá cerca de 2,5 × 10^32 tentativas totais. Mesmo depois de tudo isso, a chance de alguém, em algum lugar, obter 47 uns de uma vez ainda seria de apenas uma em dez mil. É assim tão improvável para dois UUIDv4s colidirem. Não é "raro". É absurdamente cósmico — o tipo de coincidência que faria matemáticos derrubarem seu café e verificarem o universo em busca de erros.

É Fácil Gerar um UUID

À primeira vista, gerar um UUID pode parecer simples — afinal, é apenas uma string alfanumérica de aparência aleatória. Mas tente escrever um você mesmo com caneta e papel. Você pode anotar 36 caracteres, claro, mas se repetir o exercício milhares de vezes, padrões claros surgirão. Talvez você favoreça certos dígitos como 3 ou 8, e raramente use letras como x. Um computador pode detectar esses vieses instantaneamente. Um hacker malicioso poderia analisar seus hábitos e restringir sua string "aleatória" secreta em um dia. E se você também recorrer a um computador e chamar rand(), a clássica função aleatória, para gerar cada dígito? Isso é melhor — mas não bom o suficiente. Muitos geradores de números "aleatórios" em ambientes de programação comuns são pseudoaleatórios, o que significa que seguem uma sequência matemática previsível a partir de uma semente interna, que é tipicamente baseada no tempo do sistema. Se alguém descobrir ou adivinhar essa semente, poderá reproduzir todos os valores que seu gerador já produziu.

Quão Perfeitamente Aleatório É um UUID

A aleatoriedade perfeita realmente não existe — assim como um dado perfeito não existe, ou um lançamento perfeitamente aleatório de dados não existe. Todo processo físico ou digital segue algumas regras subjacentes. No entanto, matemáticos e engenheiros passaram décadas projetando algoritmos que se aproximam o máximo possível da verdadeira aleatoriedade. Quando o Splync cria um novo UUID versão-4, não simplesmente "escolhe números aleatoriamente" como rolar dados. Ele pede ao sistema operacional pequenas pistas de imprevisibilidade — por exemplo, o momento preciso em que sua CPU termina uma tarefa, ruído elétrico fraco dentro do hardware ou flutuações de tempo de fundo na memória. Esses fragmentos de entropia são coletados e misturados em 128 bits de dados — uma longa sequência de uns e zeros. O resultado é um código que é praticamente impossível de adivinhar ou repetir para os usuários do aplicativo ou potenciais atacantes maliciosos.

Abordagem de Identificador Duplo do Splync

O Splync utiliza UUIDs para identificadores sensíveis como IDs de usuários e de projetos, porque são extremamente aleatórios e seguros. Ao mesmo tempo, dentro do servidor, o Splync converte esses UUIDs em inteiros auto-incrementados para buscas mais rápidas e análises em grandes conjuntos de dados. Essa abordagem de identificador duplo encontra um equilíbrio entre segurança e conveniência — privacidade externa com desempenho interno. O objetivo do Splync é ser um aplicativo de rastreamento de orçamento simples, seguro e sem estresse. Por trás da interface visível, continuamos aprimorando nossa arquitetura para manter as coisas suaves, seguras e discretamente inteligentes.