UUID v7 uitgelegd
UUID v7 is de versie die RFC 9562 introduceerde: de eerste 48 bits bevatten de Unix-tijd in milliseconden en de resterende 74 bits zijn random. Daardoor komt alfabetisch sorteren overeen met de volgorde van genereren.
Gebruik je een UUID als primaire sleutel in een database, dan belanden nieuwe waarden overal in de index en ontstaan er veel page splits. Bij v7 sluit elke nieuwe waarde achteraan aan, terwijl je net als bij v4 randomheid houdt.
Hoe het werkt
- Kies v7 (op deze pagina al geselecteerd).
- Stel indien nodig het aantal in, maximaal 1000.
- Klik op UUID genereren. De resultaten staan al op volgorde van genereren.
- Gebruik Alles kopiëren of download het bestand en plak de waarden in je INSERT-statements.
Waarvoor je het gebruikt
- Primaire sleutels, vooral bij de geclusterde indexen van MySQL, PostgreSQL en SQL Server.
- Gebeurtenislogboeken en auditsporen die je op volgorde van optreden leest.
- Identificaties in gedistribueerde systemen waar sortering én randomheid gevraagd zijn.
Structuur
De eerste 48 bits zijn de Unix-tijdstempel in milliseconden, daarna volgen 4 bits versienummer (7). Nog 12 bits zijn gereserveerd voor extra precisie of een teller en de laatste 62 bits zijn random.
Waar UUID v7 past
| Optie | Wanneer gebruiken |
|---|---|
v7 | Sorteert op tijd en blijft random, de moderne standaard |
v4 | Eenvoudiger als sorteren niet nodig is |
v6 | Als je een sorteervolgorde nodig hebt die aansluit op v1 |
v1 | Heeft problemen met MAC-adressen en klokprecisie |
Overzicht van alle UUID-versies
| Versie | Sorteerbaar | Herkomst van de bits | Waarvoor het past |
|---|---|---|---|
| v1 | Nee | Tijdstempel + MAC-adres | Bestaande systemen die v1 verwachten |
| v3 | Nee | MD5-hash van de naam | Deterministische ID's als MD5 verplicht is |
| v4 | Nee | 122 random bits | Vrijwel elke gewone unieke identificatie |
| v5 | Nee | SHA-1-hash van de naam | Als dezelfde naam altijd dezelfde ID moet geven |
| v6 | Ja | Herschikte tijdstempel | Als je zowel randomheid als sortering wilt |
| v7 | Ja | Unix-tijd in milliseconden | Primaire sleutels en gebeurtenis-ID's |
| v8 | Nee | Zelfgekozen bitindeling | Eigen formaten en experimenten |
Alle zeven versies zijn 128 bits en gebruiken dezelfde notatie 8-4-4-4-12. Het verschil zit alleen in wat elk bit voorstelt.
Codevoorbeelden
javascript
// Eigen implementatie of een bibliotheek
// bijvoorbeeld uuid v11+ / uuidv7
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7();
python
# Python 3.14+
import uuid
id = str(uuid.uuid7())
java
// Java 21+ (bibliotheek nodig)
// bijvoorbeeld com.fasterxml.uuid
var id = Generators.timeBasedEpochGenerator().generate().toString();
csharp
// .NET 9+
var id = Guid.CreateVersion7().ToString();
sql
-- PostgreSQL 18+
SELECT uuidv7();
Veelgestelde vragen
Is v7 beter dan v4?
Voor een geïndexeerde kolom meestal wel. Bij v7 sluit een nieuwe waarde achteraan aan, gebeurt invoegen op volgorde en zijn er minder page splits en cachemissers. Is sorteren niet nodig, dan voldoet v4 ook.
Verraadt v7 wanneer ik het heb gemaakt?
Ja, de eerste 48 bits bevatten de tijdstempel in milliseconden, dus iedereen kan het moment van genereren uitlezen. Is dat gevoelig, gebruik dan v4.
Wat gebeurt er bij meerdere waarden in dezelfde milliseconde?
De tijdstempel is dan gelijk, maar de 74 bits erachter zijn random, dus de waarden verschillen. De sortering is alleen op het niveau van de tijdstempel gegarandeerd; binnen één milliseconde is de volgorde willekeurig.