GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEV
,
WEBDEV
e
WINDEV Mobile
Inicio
|
Postagens recentes
|
Conecte-se...
|
Desconectar
|
Português
Inicio
→
WINDEV 25
→
UUID V7
UUID V7
Iniciado por Boller, jul., 20 2024 5:07 PM - Sem resposta
Conecte-se…
Boller
#1
Membro registado
3.715 mensagems
Publicado em julho, 20 2024 - 5:07 PM
UUID v7 é um formato proposto para UUIDs (Universally Unique Identifiers) que visa melhorar a eficiência e a robustez da geração de identificadores únicos. Diferente das versões anteriores, o UUID v7 inclui a capacidade de incorporar um componente de tempo, permitindo que os UUIDs sejam ordenáveis no tempo. Isso é particularmente útil em sistemas distribuídos onde a ordem de eventos é importante.
Aqui está um exemplo de como implementar a geração de um UUID v7 em WLanguage:
```wlanguage
PROCEDURE GenerateUUIDv7()
// Constants for UUID v7 format
CONSTANT TimeBits = 48
CONSTANT RandomBits = 80
// Get current timestamp in milliseconds since Unix epoch (1970-01-01)
ts IS QWORD = DateTimeToUnixUTC(DateSys() + TimeSys())
// Extract high and low bits from the timestamp
time_high IS UINT = (ts >> 32) & 0xFFFFFFFF
time_low IS UINT = ts & 0xFFFFFFFF
// Generate 80 bits of random data
random_part IS RAW(10) = GenerateRandomBinary(10)
// Construct the UUID v7
uuid_v7 IS STRING
uuid_v7 = StringBuild("%08X-%04X-%04X-%04X-%012X", time_high, (time_low >> 16) & 0xFFFF, (time_low & 0xFFFF) | 0x7000, (random_part[1 TO 2] >> 4) & 0x0FFF, random_part[3 TO 10])
RESULT uuid_v7
END
PROCEDURE GenerateRandomBinary(length)
random_binary IS RAW(length)
FOR i = 1 TO length
random_binary[i] = Random(0, 255)
END
RESULT random_binary
END
```
### Explicação do Código:
1. **Constantes**:
- `TimeBits` e `RandomBits` são definidos para indicar a quantidade de bits usados para o timestamp e a parte aleatória do UUID.
2. **Timestamp**:
- `ts` captura o timestamp atual em milissegundos desde a época Unix.
- `time_high` e `time_low` extraem as partes alta e baixa do timestamp.
3. **Parte Aleatória**:
- `random_part` gera 80 bits (10 bytes) de dados aleatórios.
4. **Construção do UUID**:
- `uuid_v7` monta o UUID usando os componentes de tempo e aleatórios.
- `StringBuild` formata a string do UUID conforme o padrão UUID v7.
### Observação:
- A função `DateTimeToUnixUTC` é usada para converter a data e hora atuais para o formato Unix timestamp.
- A função `GenerateRandomBinary` cria um array de bytes aleatórios.
- `Random(0, 255)` gera um valor aleatório entre 0 e 255 para cada byte.
Com este código, você pode gerar UUIDs v7 que são ordenáveis no tempo e possuem uma forte componente de aleatoriedade para garantir unicidade em sistemas distribuídos.
PROCEDURE GenerateUUIDv7()
// Obter o timestamp atual em milissegundos desde a época Unix (1970-01-01)
ts IS QWORD = DateSys() + TimeSys()
// Extrair os bits altos e baixos do timestamp
time_high IS UINT = (ts >> 32) & 0xFFFFFFFF
time_low IS UINT = ts & 0xFFFFFFFF
// Gerar 80 bits (10 bytes) de dados aleatórios
random_part IS RAW = GenerateRandomBinary(10)
// Construir o UUID v7
uuid_v7 IS STRING
uuid_v7 = NumToHexa(time_high,
+ "-" + NumToHexa((time_low >> 16) & 0xFFFF, 4) + "-" + NumToHexa((time_low & 0xFFFF) | 0x7000, 4) + "-" + NumToHexa((random_part[1 TO 2] >> 4) & 0x0FFF, 4) + "-" + NumToHexa(random_part[3 TO 10], 12)
RESULT uuid_v7
END
PROCEDURE GenerateRandomBinary(length)
random_binary IS RAW
FOR i = 1 _TO_ length
random_binary += Charact(Random(0, 255))
END
RESULT random_binary
END
Aqui estão 10 exemplos de UUIDs v7 gerados usando o formato descrito:
01. `01884F6B-92A4-7BCC-9000-ACDE48001122`
02. `01884F6B-92A5-7BCC-9000-ACDE48001123`
03. `01884F6B-92A6-7BCC-9000-ACDE48001124`
04. `01884F6B-92A7-7BCC-9000-ACDE48001125`
05. `01884F6B-92A8-7BCC-9000-ACDE48001126`
06. `01884F6B-92A9-7BCC-9000-ACDE48001127`
07. `01884F6B-92AA-7BCC-9000-ACDE48001128`
08. `01884F6B-92AB-7BCC-9000-ACDE48001129`
09. `01884F6B-92AC-7BCC-9000-ACDE4800112A`
10. `01884F6B-92AD-7BCC-9000-ACDE4800112B`
Esses UUIDs v7 seguem o formato proposto, incorporando um componente de tempo (o timestamp em milissegundos) e uma parte aleatória, garantindo a unicidade e a ordenabilidade temporal dos identificadores.
VANTAGENS
TEM ORDENAÇÃO
É MENOR QUE A V4
Precisamos desse tipo na Análise e o comando GetUuid7
Mandem e-mail para suporte solicitando esse recurso para a PCSOFT
--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, julho, 20 2024 - 5:15 PM
Denunciar
0
0
→ Voltar para WINDEV 25
WINDEV 25
WINDEV 25
WINDEV 26
WINDEV 2024
WINDEV 2024
WINDEV 2024
WEBDEV 2024
WEBDEV 2024
WEBDEV 2024
WINDEV Mobile 2024
WINDEV Mobile 2024
WINDEV (versões anteriores)
WINDEV (versões anteriores)
WEBDEV (versões anteriores)
WINDEV Mobile (versões anteriores)
Reports & Queries
Off-topic
Ferramentas
Français
English
Español
Portuguesa
Fermer cette fenêtre
Tipo de Pesquisa
Apenas tópicos
Todas as mensagens
Período de pesquisa
Qualquer momento
Última hora
Últimas 24 horas
Semana passada
Mês passado
Ano passado
Cancelar
Pré-visualização da sua mensagem
Adicionar imagem
Importar uma imagem de uma URL
Enviar uma imagem a partir do seu disco
Deixe um ficheiro ou clique em "Procurar ..."
ou
Cancelar
0%
WLanguage
SQL
XML, HTML
JAVA, Javascript
Texto