UUID v4 eller v7: hvilken bør du bruke, og hvorfor det betyr noe
Bruk UUID v4 når du trenger en tilfeldig identifikator og ikke noe mer. Bruk UUID v7 når identifikatoren skal være en databasenøkkel, eller når du vil at ID-ene skal sorteres etter når de ble laget. Begge er 128 bit og skrives i samme form med 36 tegn, så forskjellen ligger i hvordan bitene er ordnet. UUID-generatoren nedenfor lager begge versjonene, én til 500 om gangen, direkte i nettleseren din.
UUID-generatorTrenger unike ID-er til koden minGjør det gratisSlik ser en UUID ut
En UUID, eller universelt unik identifikator, er et 128-bits tall skrevet som 32 heksadesimale siffer i fem grupper: 8, 4, 4, 4 og 12 siffer, atskilt med bindestreker. Et eksempel er 3f2b8c1e-6d4a-4f7b-9c2e-8a1d5e0b7f63.
To deler av tallet er faste. Fire bit angir versjonen, så den tredje gruppen starter med 4 for v4 eller 7 for v7. To bit angir variant, så den fjerde gruppen starter med 8, 9, a eller b. Resten bærer selve identifikatoren. Variant- og versjonsbitene er grunnen til at en v4-UUID har 122 tilfeldige bit, ikke 128.
UUID v4: tilfeldig
En v4-UUID er tilfeldig bortsett fra de faste bitene. De 122 tilfeldige bitene gjør at en gjentakelse er svært lite sannsynlig. Anta at du lager en milliard v4-UUID-er. Sannsynligheten for at to av dem er like, er omtrent n i andre delt på to ganger antall mulige verdier, og det gir cirka 10 opphøyd i minus 19. Med andre ord er kollisjoner ikke noe du må planlegge for.
Anslaget forutsetter at generatoren henter bitene sine fra en kryptografisk tilfeldighetskilde. En forutsigbar generator ville undergravd anslaget. Dette verktøyet bruker nettleserens kryptografiske tilfeldighetskilde, via crypto.randomUUID eller crypto.getRandomValues.
UUID v7: tid først
RFC 9562 definerer v7. De første 48 bitene inneholder Unix-tid i millisekunder, så en ID laget senere har en større første del enn en ID laget tidligere. Deretter kommer versjonsbitene, så tilfeldige bit, variantbitene og flere tilfeldige bit. Noe av det tilfeldige rommet kan brukes til en teller, som holder IDene i rekkefølge når flere lages innenfor samme millisekund.
Fordi tiden kommer først, gir sortering av v7-ID-er som tekst, i samme skrivemåte, sortering etter når de ble laget, ned til millisekundet. Det fungerer fordi de heksadesimale sifrene har fast bredde, og tiden står i de ledende tegnene.
Tiden er også synlig. Den som leser en v7-UUID, kan se omtrent når den ble laget. Du kan sjekke dette selv med feltet Undersøk i UUID-generatoren, som gjør de første 48 bitene om til dato og klokkeslett.
Hvorfor v7 passer til databaseindekser
Et databaseindeks er som regel et B-tre, en struktur som holdes sortert etter nøkkel. Når nøkkelen er tilfeldig, som med v4, havner hver ny rad et tilfeldig sted i indeksen. Databasen må da skrive til mange forskjellige deler av indeksen, noe som gir flere sideoppdelinger og flere cache-bommer. I en stor tabell summerer dette seg.
En v7-nøkkel er større enn nesten alle nøkler som allerede finnes i indeksen, fordi tidsdelen vokser. Nye rader legges til nær slutten av indeksen, omtrent slik et automatisk økende tall ville gjort. De nyeste indekssidene holdes i minnet, og skrivingen blir ryddig. Forskjellen merkes mest i store tabeller som vokser hele tiden, og er vanskelig å se i en liten tabell.
Velge mellom v4 og v7
- Primærnøkler i databaser, eller alle tabeller som vokser over tid: v7. Indeksen holder seg ordnet.
- Logger, hendelser eller meldinger du ofte sorterer etter tid: v7, fordi ID-en i seg selv bærer rekkefølgen.
- Offentlige ID-er der tidspunktet for opprettelsen bør være skjult: v4. En v7-ID viser når den ble laget.
- Mange enheter med upålitelige klokker: v4 og v7 er begge unike, fordi de tilfeldige bitene gjør jobben. Bare sorteringen av v7 avhenger av at klokkene er riktige.
Begge versjonene er standard, men eldre biblioteker kjenner kanskje bare v4. RFC 4122 beskrev versjon 1 til 5 i mange år. RFC 9562 ble publisert i mai 2024, erstatter RFC 4122 og definerer versjonene 6, 7 og 8. Sjekk at biblioteket du bruker, støtter v7, før du stoler på det.
Lagre UUID-er
En UUID skrevet som tekst tar 36 tegn. De 16 bytene kan lagres i binær form, som tar langt mindre plass. Mange databaser har en egen UUID-type eller en binær kolonne på 16 byte til dette formålet, og den sammenlignes raskere enn tekst.
Velg ett format og hold deg til det. Store bokstaver, små bokstaver, bindestreker og klammeparenteser er den samme UUID-en for et menneske, men en database eller en strengsammenligning kan behandle dem som ulike verdier. Generatorens alternativer for store bokstaver, uten bindestreker og med klammeparenteser finnes for systemer som trenger akkurat disse formene.
Bruk aldri en UUID som hemmelighet
En UUID er en identifikator, ikke et passord, et sesjonstoken eller en tilgangsnøkkel. Den er laget for å være unik, ikke for å være umulig å gjette. En v7-UUID bærer også tidspunktet den ble laget. Og identifikatorer havner i lenker, logger, e-poster og skjermbilder, der alle som ser dem, kan bruke dem på nytt.
Tilgangskontroll hører hjemme på serveren. En person som kjenner en ID, skal ikke automatisk få lov til å se eller endre posten den peker på. For passord, passfraser eller tokener bør du bruke en generator laget for hemmeligheter. Passordgeneratoren lager tilfeldige passord eller ordpassfraser på enheten din med sikker tilfeldighet, og anslår styrken deres. For bakgrunn om hvorfor lengde og tilfeldighet betyr noe, les sterke passord og entropi.
Slik bruker du verktøyet
- Velg versjon 4 for tilfeldige ID-er, eller versjon 7 for ID-er som sorteres etter tid.
- Angi antallet, fra 1 til 500 om gangen.
- Kryss av for store bokstaver, uten bindestreker eller klammeparenteser hvis koden din krever en bestemt form.
- Kopier alle, eller last ned listen som en .txt-fil.
- Lim inn en UUID under Undersøk for å lese versjonen, varianten og, for v7, tiden som ligger inni den.
Raske svar
Er en v4-UUID unik? I praksis ja. De 122 tilfeldige bitene gjør en gjentakelse så lite sannsynlig at du ikke trenger å sjekke for en.
Bør jeg bruke v7 til alt? Ikke alltid. Bruk v7 til databasenøkler og alt som sorteres etter tid. Bruk v4 når tidspunktet for opprettelsen bør være skjult.
Kan jeg bruke en UUID som passord? Nei. Den er en identifikator. Bruk en passordgenerator til alt som må holdes hemmelig.
Sender verktøyet ID-ene noen steder? Nei. ID-ene lages og vises i nettleseren din, og de sendes ikke til en server.
Oversatt fra Engelsk original med KI-hjelp.
Kommentarer
Ingen kommentarer ennå. Bli den første.


