Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy Mysql UUID_SHORT() jest porównywalny z UUID()

uuid_short() tworzy bitową konglomerację identyfikatora serwera, dość statyczny składnik czasu i kolejno rosnącą 24-bitową liczbę całkowitą. Te bity są wstawiane do 8-bajtowej liczby całkowitej. Składnik czasu jest oparty na czasie rozruchu serwera.

uuid() tworzy ciąg szesnastkowy, który reprezentuje 16-bajtowy UUID wersji 1. Identyfikatory UUID w wersji 1 to bitowa konglomeracja identyfikatora serwera, bieżącego znacznika czasu, kilku bajtów, które wchodzą w grę, jeśli identyfikatory są generowane z hiperprędkością, oraz kilku bitów narzędziowych.

Aby odpowiedzieć na twoje pytanie:czy uuid_short? zapewniają unikatowość czasu i przestrzeni, która rywalizuje z uuid ? Odpowiedź brzmi nie. Przykładem jest identyfikator serwera w uuid_short to tylko jeden bajt. Więc jeśli masz 256 lub więcej serwerów, co najmniej kilka z nich będzie miało ten sam identyfikator węzła, co oznacza utratę unikalności miejsca. Dla porównania, identyfikator serwera w UUID w wersji 1 ma długość 6 bajtów, skutecznie zabijając szansę na duplikaty dla wszystkich oprócz największej korporacyjnej farmy serwerów :)

Lepszym pytaniem jest, czy uuid_short jest wystarczająco dobry. Możesz zobaczyć kolizje identyfikatorów, jeśli:

  1. Wygeneruj ponad 16 milionów IDS z tego samego serwera w krótkim czasie. ***
  2. Uruchamiaj serwery rozruchowe o tym samym identyfikatorze serwera dokładnie w tym samym czasie i udostępniaj między nimi dane.
  3. Pobaw się zegarem systemowym, a następnie zrestartuj serwer.

Drugi problem wydaje się mało prawdopodobny dla większości ludzi, ale pierwszy jest wart zbadania, zanim zdecydujesz się na zrobienie uuid_short podstawa twoich kluczy.

*** Na podstawie dokumentacji mysql dla uuid_short , wygląda na to, że zobaczysz kolizje, jeśli wygenerowałeś ponad 16 milionów identyfikatorów w czasie pracy jednego serwera. Ale to byłoby głupie. Dokumentacja mysql mówi, że wszystko w porządku, o ile nie generujesz 16 milionów identyfikatorów na sekundę. Oznacza to, że muszą podbić niektóre bity w znaczniku czasu, jeśli wyczerpiesz 16 milionów sekwencyjnych identyfikatorów. Nie testowałem tego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przechowywać html w bazie danych mysql

  2. Dołączanie do MySQL oparte na indeksowaniu YEAR () - Dodawanie kolumny lub generowana kolumna

  3. prześlij wiele plików na serwer i zapisz do bazy danych

  4. SUMA parę LICZB z dwóch tabel na podstawie zmiennej czasu

  5. Rozwiązywanie problemów z replikacją MySQL:część druga