PROFESSIONAL NEWSGROUPS
WINDEV
,
WEBDEV
and
WINDEV Mobile
Home
|
Recent messages
|
Connect
|
Sign out
|
English
Home
→
WINDEV 25
→
UUID V7
UUID V7
Started by Boller, Jul., 20 2024 5:07 PM - No answer
Connect yourself…
Boller
#1
Registered member
3,694 messages
Popularité : +175 (223 votes)
Posted on July, 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/
Message modified, July, 20 2024 - 5:15 PM
Report
0
0
→ Go back to WINDEV 25
WINDEV 25
Français
English
Español
Portuguesa
Close this window
Search type
Only topics
All the messages
Search period
Any time
Past hour
Past 24 hours
Past week
Past month
Past year
Cancel
Preview of your message
Adding an image
Import an image from a URL
Send an image from a file of your disk
Drop a file or click "Browse..."
or
Cancel
0%
WLanguage
SQL
XML, HTML
JAVA, Javascript
Text