A partir de 4D 20 R10, UUIDs são agora gerados diretamente usando um algoritmo interno em vez de depender de funções do sistema – dando-lhe um melhor controlo sobre o seu formato e comportamento. E com esta atualização, agora pode optar por UUIDs versão 7, que suportam ordenação cronológica. Vamos explorar o que isso significa para seus aplicativos.
Entendendo as versões de UUID
Todos os UUIDs partilham o mesmo formato: 128 bits representados por 32 caracteres hexadecimais (0-9 + A-F). No entanto, eles podem codificar diferentes tipos de informações. O RFC 9562 define atualmente oito versões de UUID. Internamente, um UUID é armazenado em dois números inteiros de 64 bits, tornando a comparação, a consulta e a ordenação extremamente eficientes em CPUs de 64 bits. Caracteres hexadecimais são apenas um formato de exibição, internamente não são usados.
Até agora, 4D dependia de funções do sistema para gerar UUIDs. Essas funções não permitiam escolher ou mesmo saber qual versão era usada. Na prática, tipicamente produziam UUIDs versão 4 – completamente aleatórios.
Com a recente evolução do RFC, foi introduzida a versão 7. Ela incorpora um carimbo de data/hora, tornando os UUIDs classificáveis por hora de criação. Muitos de vocês pediram suporte para UUIDv7 no fórum 4D Feature Request, e estamos felizes em entregá-lo em 4D 20 R10!
Versão 4 ainda por padrão
Para assegurar consistência e compatibilidade, 4D continua a usar a versão 4 de UUIDs por padrão. No entanto, 4D não depende mais das funções do sistema para gerar UUIDs, mas agora os calcula internamente. Isso ajuda a prevenir qualquer mudança inesperada devido a futuras atualizações do sistema.
E se quiser tirar vantagem da ordenação cronológica da versão 7, agora pode habilitá-la – seja através de configurações ou código.
O que torna a versão 7 especial?
Os UUIDs da versão 7 começam com um carimbo de data e hora da Época do Unix, permitindo que sejam ordenados cronologicamente. Isto é especialmente útil durante o desenvolvimento ou depuração, quando se pretende que os registos recém-criados apareçam no topo (ou no fundo) de uma caixa de listagem.
Como a versão 7 usa precisão de microssegundos, oferece uma granularidade mais fina do que o tradicional comando Timestamp tradicional, que é limitado a milissegundos.
Nota: Se forem criados vários registos no mesmo microssegundo, eles partilharão a mesma parte do carimbo de data/hora. No entanto, os seus UUIDs continuarão a ser únicos graças aos bytes aleatórios adicionais. A ordenação desses registos específicos pode não ser significativa, mas ordená-los juntamente com outros continua a ser útil. Na prática, a criação de registos demora normalmente mais de um microssegundo, pelo que este caso extremo é raro.
Nova configuração para UUIDs automáticos da versão 7
A ativação da versão 7 para UUIDs gerados automaticamente é simples. Basta abrir a caixa de diálogo Configurações da estrutura, ir para a página Banco de dados > Armazenamento de dados e selecionar a versão UUID desejada.

Uma vez definida a versão 7, todos os UUIDs gerados automaticamente – como os utilizados para chaves primárias – seguirão o novo formato.
Os UUIDs existentes na sua base de dados permanecem inalterados para preservar a consistência. E como a diferença entre as versões 4 e 7 é interna (não estrutural), ambos os formatos podem coexistir sem problemas.
Gerar UUIDs da versão 7 no código
O comando Generate UUID também foi atualizado para suportar a versão 7. Só tem de especificar a versão como parâmetro! Muito simples, não é?
E se o parâmetro estiver ausente, a versão utilizada por defeito continua a ser a 4, para manter o seu código consistente.
var $uuid : Text
$uuid :=Generate UUID // v4: 578BFEC987BD4C11AE8AB9CD3DC12DD0
$uuid :=Generate UUID(4) // v4: C2BE4B6723634DBE9F4387B1226A4B4F
$uuid :=Generate UUID(7) // v7: 0198C7A4E41A7B6CB39F460873165D30
$uuid :=Generate UUID(7) // v7: 0198C7A543557F89AA7D83563AB5C97E
Aqui está uma comparação rápida dos resultados acima:
- Os UUIDs da versão 4 são totalmente aleatórios.
- Os UUIDs da versão 7 partilham um prefixo comum (carimbo de data/hora), com aleatoriedade no final.
Esperamos que esta nova funcionalidade lhe dê mais flexibilidade e controlo sobre os seus desenvolvimentos. Como sempre, estamos ouvindo seu feedback e evoluindo 4D para atender suas necessidades.
Boa codificação!
