Tive uma reunião a algum tempo para avaliar uma solução de alta volumetria com persistência de dados; para entendimento das grandezas envolvidas, são alguns terabytes de armazenamento e algo próximo de 1 bilhão de registros. São números significativos onde, entre outros temas relevantes e uma excelente apresentação pelo time de engenharia da épocaa escolhas de tipos de dados foram debatidas.
Um dos tipos que participaram deste discursão produtiva foi o uso de GUID como identificadores de registros. Este é um tipo recorrente em varias solução que vejo por aqui e resolvi fazer uma provocação:
Usar GUID como um identificador único **externo** e uma coisa, Usar GUID como um identificador único **interno** para representar a unicidade de dado é outra coisa!
UUID garante aleatoriedade e unicidade , características desejadas de segurança para não permitir a previsão de valores e manter um identificador único. Estas características são uteis quando precisamos expor estes identificadores para o mundo externo ou fora do domínio
de uma solução.
UUID aplicada a representar a unicidade de dado, presumindo que este dado é persistido sobre esta chave, é uma grande dor de cabeça, sabe porquê ? Como a chave não é ordenada, o banco de dados armazenar esta informação de forma não eficiente em disco, gerando uma quantidade de operações E/S em disco para encontrar o registro apropriado. Isso é custo de cpu e perda de performance (latência).
Alguns bancos de dados possuem funcionalidades para gerar uma UUID capaz de ser ordenada mas vale apena ?
- Se acoplamento não é problema e restringir a geração somente no contexto de banco de dados então pode ser uma alternativa a ser avaliada.
Se você desejar ter esta funcionalidade “cross” independente de contexto talvez devesse avaliar alternativas como identificadores únicos Lexicograficamente Classificáveis : ULID (https://lnkd.in/dE34e-HK) - Algumas de suas característicasCompatibilidade de 128 bits com UUID
- 1.21e+24 ULIDs exclusivos por milissegundo
- Classificável lexicograficamente!
- Codificado canonicamente como uma sequência de 26 caracteres, em oposição ao UUID de 36 caracteres
- Usa base32 de “Crockford” para melhor eficiência e legibilidade (5 bits por caractere)
- Não diferencia maiúsculas de minúsculas
- Sem caracteres especiais (URL seguro)
- Ordem de classificação monotônica (detecta e trata corretamente o mesmo milissegundo)
Quando você escolhe trabalhar com GUIDS, quais considerações você utiliza ?
Tenham um excelente dia! Eu sou Fernando Cerqueira e entrego estratégias digitais para os desafios do presente, com propostas de inovação para um futuro sustentável.






