UUID v4 eller v7: hvilken skal du bruge, og hvorfor det betyder noget
Brug UUID v4, når du har brug for en tilfældig identifikator og ikke mere. Brug UUID v7, når identifikatoren skal være en databasenøgle, eller når du vil have ID'er sorteret efter oprettelsestidspunkt. Begge er 128 bit og skrives i samme form med 36 tegn, så forskellen ligger i, hvordan bittene er ordnet. UUID-generatoren nedenfor laver en af versionerne, en til 500 ad gangen, direkte i din browser.
UUID-generatorBrug for unikke ID'er til kodenPrøv gratisSådan ser en UUID ud
En UUID, eller universelt unik identifikator, er et 128-bit-tal, skrevet som 32 hexadecimale cifre i fem grupper: 8, 4, 4, 4 og 12 cifre, adskilt af bindestreger. Et eksempel er 3f2b8c1e-6d4a-4f7b-9c2e-8a1d5e0b7f63.
To dele af tallet er faste. Fire bit angiver versionen, så den tredje gruppe starter med 4 for v4 eller 7 for v7. To bit angiver varianten, så den fjerde gruppe starter med 8, 9, a eller b. Resten bærer selve identifikatoren. Variant- og versionsbittene er grunden til, at en v4-UUID har 122 tilfældige bit og ikke 128.
UUID v4: tilfældig
En v4-UUID er tilfældig bortset fra de faste bit. Dens 122 tilfældige bit gør, at en gentagelse er ekstremt usandsynlig. Antag, at du laver en milliard v4-UUID'er. Sandsynligheden for, at to af dem er ens, er cirka n i anden divideret med to gange antallet af mulige værdier, og det svarer til omkring 10 opløftet til minus 19. Med andre ord er kollisioner ikke noget, du behøver at designe efter.
Det estimat forudsætter, at generatoren trækker sine bit fra en kryptografisk tilfældighedskilde. En forudsigelig generator ville underminere det. Dette værktøj bruger browserens kryptografiske tilfældighedskilde via crypto.randomUUID eller crypto.getRandomValues.
UUID v7: tid først
RFC 9562 definerer v7. De første 48 bit indeholder Unix-tid i millisekunder, så et ID lavet senere har en større første del end et ID lavet tidligere. Derefter kommer versionsbittene, så tilfældige bit, variantbittene og flere tilfældige bit. Noget af den tilfældige plads kan rumme en tæller, som holder ID'erne i rækkefølge, når flere bliver lavet inden for samme millisekund.
Fordi tiden kommer først, sorterer man v7-ID'er efter oprettelsestidspunkt, ned til millisekundet, når man sorterer dem som tekst i samme skrivemåde. Det virker, fordi de hexadecimale cifre har fast bredde, og tiden står i de første tegn.
Tiden er også synlig. Den, der læser en v7-UUID, kan se omtrent hvornår den blev lavet. Du kan selv kontrollere det i feltet Undersøg i UUID-generatoren, som omregner de første 48 bit til en dato og et klokkeslæt.
Hvorfor v7 passer til databaseindekser
Et databaseindeks er typisk et B-træ, en struktur, der holder nøglerne sorteret. Når nøglen er tilfældig, som med v4, havner hver ny række et tilfældigt sted i indekset. Databasen skal så skrive til mange forskellige dele af indekset, hvilket giver flere sideopdelinger og flere cache-misses. I en stor tabel lægger det arbejde sig sammen.
En v7-nøgle er større end næsten alle nøgler, der allerede findes i indekset, fordi tidsdelen vokser. Nye rækker tilføjes tæt på slutningen af indekset, ligesom et automatisk nummereret tal ville blive det. De seneste indekssider bliver i hukommelsen, og skrivningerne forbliver ryddelige. Forskellen er mest mærkbar i store tabeller, der hele tiden vokser, og den er svær at se i en lille tabel.
Valget mellem v4 og v7
- Primære nøgler i databaser, eller enhver tabel der vokser over tid: v7. Indekset forbliver ordnet.
- Logs, hændelser eller beskeder, som du ofte sorterer efter tid: v7, fordi selve ID'et bærer rækkefølgen.
- Offentlige ID'er, hvor oprettelsestidspunktet skal forblive privat: v4. Et v7-ID viser, hvornår det blev lavet.
- Mange enheder med upålidelige ure: Både v4 og v7 forbliver unikke, fordi de tilfældige bit klarer det. Kun sorteringen af v7 afhænger af, at urene er korrekte.
Begge versioner er standard, men ældre biblioteker kender måske kun v4. RFC 4122 beskrev versionerne 1 til 5 i mange år. RFC 9562 blev udgivet i maj 2024, erstatter RFC 4122 og definerer versionerne 6, 7 og 8. Tjek, at dit biblioteks version understøtter v7, før du stoler på det.
Gem UUID'er
En UUID skrevet som tekst fylder 36 tegn. Dens 16 bytes kan gemmes i binær form, hvilket fylder langt mindre. Mange databaser har en indbygget UUID-type eller en binær kolonne på 16 bytes til netop dette, og den sammenlignes hurtigere end tekst.
Vælg ét format, og hold fast i det. Store bogstaver, små bogstaver, bindestreger og klammer er den samme UUID for et menneske, men en database eller en strengsammenligning kan behandle dem som forskellige værdier. Generatorens valg om store bogstaver, ingen bindestreger og klammer findes til systemer, der kræver disse former.
Brug aldrig en UUID som hemmelighed
En UUID er en identifikator, ikke en adgangskode, et sessionstoken eller en adgangsnøgle. Den er bygget til at være unik, ikke til at være umulig at gætte. En v7-UUID bærer også sit oprettelsestidspunkt. Og identifikatorer bliver kopieret ind i links, logs, e-mails og skærmbilleder, hvor alle, der ser dem, kan genbruge dem.
Adgangskontrol hører hjemme på serveren. En person, der kender et ID, skal ikke automatisk have lov til at se eller ændre den post, det peger på. Til adgangskoder, adgangssætninger eller tokens skal du bruge en generator, der er lavet til hemmeligheder. Adgangskodegeneratoren laver tilfældige adgangskoder eller ordbaserede adgangssætninger på din enhed med sikker tilfældighed og estimerer deres styrke. Vil du vide mere om, hvorfor længde og tilfældighed betyder noget, så læs stærke adgangskoder og entropi.
Sådan bruger du værktøjet
- Vælg version 4 til tilfældige ID'er, eller version 7 til ID'er, der sorteres efter tid.
- Vælg antallet, fra 1 til 500 ad gangen.
- Sæt flueben ved store bogstaver, ingen bindestreger eller klammer, hvis din kode kræver en bestemt form.
- Kopiér dem alle, eller download listen som en .txt-fil.
- Indsæt en UUID under Undersøg for at læse dens version, dens variant og, for v7, tiden, der er indlejret i den.
Hurtige svar
Er en v4-UUID unik? I praksis ja. Dens 122 tilfældige bit gør en gentagelse så usandsynlig, at du ikke behøver at kontrollere for en.
Skal jeg bruge v7 til alt? Ikke altid. Brug v7 til databasenøgler og alt, der sorteres efter tid. Brug v4, når oprettelsestidspunktet skal forblive skjult.
Kan jeg bruge en UUID som adgangskode? Nej. Den er en identifikator. Brug en adgangskodegenerator til alt, der skal forblive hemmeligt.
Sender værktøjet ID'erne nogen steder hen? Nej. ID'erne laves og vises i din browser, og de bliver ikke sendt til en server.
Oversat fra Engelsk original med AI-hjælp.
Kommentarer
Ingen kommentarer endnu. Vær den første.


