|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
Iniciado por Boller, 20,jul. 2024 17:07 - No hay respuesta |
| |
| | | |
|
| |
Miembro registrado 4.521 mensajes |
|
Publicado el 20,julio 2024 - 17:07 |
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/Mensaje modificado, 20,julio 2024 - 17:15 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|