sql >> Databasteknik >  >> RDS >> Mysql

Är Mysql UUID_SHORT() jämförbar med UUID()

uuid_short() producerar en bitvis konglomerat av server-ID:t, en ganska statisk tidskomponent och ett sekventiellt ökande 24-bitars heltal. Dessa bitar är fyllda i ett heltal på 8 byte. Tidskomponenten baseras på serverns uppstartstid.

uuid() producerar hexadecimal sträng som representerar en 16 byte version1 UUID. Version 1 UUID är en bitvis konglomerat av server-ID:t, den aktuella tidsstämpeln, några byte som kommer in i bilden om du genererar ID:n i hög hastighet, och några verktygsbitar.

För att svara på din fråga:gör uuid_short ger tid och rum unikhet som konkurrerar med uuid ? Svaret är nej. Exempelvis server-ID:t i en uuid_short är bara en byte. Så om du har 256 eller fler servrar, kommer åtminstone några av dem att ha samma nod-id, vilket innebär att du förlorar utrymmesunikitet. Som jämförelse är server-ID:t i version 1 UUID 6 byte långt, vilket effektivt dödar risken för dubbletter för alla utom de största företagens serverfarmar :)

En bättre fråga är om uuid_short är tillräckligt bra. Du kan se ID-kollisioner om du:

  1. Generera mer än 16 miljoner IDS från samma server på kort tid. ***
  2. Starta servrar med samma server-ID alla på exakt samma gång och dela data mellan dem.
  3. Pippla med systemklockan och starta sedan om servern.

Det andra problemet verkar osannolikt för de flesta, men det första är värt att undersöka innan du bestämmer dig för att göra uuid_short grunden för dina nycklar.

*** Baserat på mysql-dokumenten för uuid_short , det verkar som om du skulle se kollisioner om du genererade mer än 16 miljoner ID:n under drifttiden för en enda server. Men det vore dumt. Mysql-dokumenten fortsätter med att säga att du mår bra så länge du inte genererar 16 miljoner ID:n per sekund. Det innebär att de måste stöta några av bitarna i tidsstämpeln om du tar slut på de 16 miljoner sekventiella ID:n. Jag har inte testat detta.



  1. hur man optimerar den här frågan (4 mm tabeller involverade)

  2. Stort databashanteringssystem:Design och arkitekt

  3. Automatisk ökning av tabell-id med strängkombination i databasen automatiskt

  4. MySql - Hur får man värde i föregående rad och värde i nästa rad?