Jak i kiedy używać typu mysql UUID

Jak i kiedy używać typu mysql UUID
Według przestrzeni i czasu uniwersalny unikalny identyfikator, znany jako UUID, jest 128-bitową długą wartością, która jest wyjątkowa na całym świecie. UUID jest określony przez RFC 4122.

Wartości UUID są niezwykle fascynujące, ponieważ nawet jeśli wartości są generowane z tego samego urządzenia, nigdy nie mogą być takie same. Nie będę jednak wdrażał szczegółów na temat technologii używanych do wdrażania UUIDS.

W tym samouczku skupimy się na zaletach korzystania z UUIDS zamiast INT dla kluczy podstawowych, wad UUIDS w bazie danych oraz na tym, jak wdrażać UUID w MySQL.

Zacznijmy:

UUID w mysql

Aby wygenerować UUID w MySQL, używamy funkcji UUID (). Ta funkcja zwraca ciąg UTF8 z grupą 5-heksadecimalną w formie:

aaaaaaaa-bbbb-ccccc-dddd-eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

Pierwsze trzy segmenty są generowane jako część formatu czasu w formacie niskim, środkowym i wysokim.

Czwarty segment wartości UUID jest zarezerwowany dla zapewnienia tymczasowej wyjątkowości, gdzie wartość znacznika czasu spada monotoniczność.

Ostateczny segment reprezentuje wartość węzła IEEE 802, co oznacza wyjątkowość w przestrzeni.

Kiedy używać UUID w MySQL

Wiem, co myślisz:

Jeśli UUID są unikalne na całym świecie, dlaczego nie używamy ich jako domyślnych kluczy podstawowych w tabelach bazy danych? Odpowiedź jest zarówno prosta, jak i nie prosta.

Na początek UUID nie są natywnymi typami danych, takimi jak INT, które można ustawić jako klucz podstawowy i automatycznie zbieranie, ponieważ do bazy danych dodaje się więcej danych.

Po drugie, UUID mają swoje wady, które mogą nie mieć zastosowania we wszystkich przypadkach.

Pozwól mi udostępnić kilka przypadków, w których używanie UUID jako kluczy podstawowych może mieć zastosowanie.

  1. Jednym z powszechnych scenariuszy jest to, gdzie wymagana jest pełna wyjątkowość. Ponieważ UUID są wyjątkowe na całym świecie, oferują idealną opcję do łączenia wierszy w bazach danych, jednocześnie zachowując wyjątkowość.
  2. Bezpieczeństwo - UUID nie ujawniają żadnych informacji związanych z Twoimi danymi, a zatem są przydatne, gdy bezpieczeństwo jest czynnikiem. Po drugie, są generowane offline, nie ujawniając żadnych informacji o systemie.

Poniżej znajdują się niektóre z wady wdrażania UUID w Twojej bazie danych.

  1. UUID są 6-bajtowe w porównaniu do liczb całkowitych, które są 4-bajtowe. Oznacza to, że będą zajmować więcej pamięci dla tej samej ilości danych w porównaniu z liczbami całkowitych.
  2. Jeśli UUID są indeksowane, mogą powodować znaczne koszty wydajności i spowolnić bazę danych.
  3. Ponieważ UUID są losowe i unikalne, mogą sprawić, że proces debugowania jest niepotrzebnie uciążliwy.

Funkcje UUID

W MySQL 8.0 i później, możesz użyć różnych funkcji, aby przeciwdziałać niektórym wadom przedstawionym przez UUIDS.

Te funkcje to:

  1. Uuid_to_bin - konwertuje UUID z Varchar na binarny, który jest bardziej wydajny do przechowywania w bazach danych
  2. Bin_to_uuid - od binarnego do varchar
  3. Is_uuid - zwraca boolean true, jeśli arg jest prawidłowy varchar uuid. Odwrotność jest prawdziwa.

Podstawowe użycie typów mysql UUID

Jak wspomniano wcześniej, aby zaimplementować UUIDS w MySQL, używamy funkcji UUID (). Na przykład, aby wygenerować UUID, robimy:

mysql> Wybierz uuid ();
+--------------------------------------+
|. Uuid () |
+--------------------------------------+
|. F9EB97F2-A94B-11EB-AD80-089798BCC301 |
+--------------------------------------+
1 wiersz w zestawie (0.01 s)

Stół z uuid

Utwórzmy tabelę z wartościami UUID i zobaczmy, w jaki sposób możemy wdrożyć taką funkcjonalność. Rozważ pytanie poniżej:

Upuść schemat, jeśli istnieje UUIDS;
Utwórz schemat UUIDS;
Użyj UUIDS;
Utwórz sprawdzanie poprawności tabeli
(
ID Binarny (16) klucz podstawowy
);
Wstaw do sprawdzania poprawności (id)
Wartości (uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ()));

Po wygenerowaniu wszystkich UUID, możemy je wybrać i przekonwertować z binarnych na łańcuchy UUID, jak pokazano w zapytaniu poniżej:

Wybierz identyfikator bin_to_uuid (id) z sprawdzania poprawności;

Oto wyjście:

Wniosek

W MySQL nie ma wiele do omówienia, ale jeśli chcesz dowiedzieć się o nich więcej, rozważ sprawdzenie źródła MySQL:

https: // dev.Mysql.com/doc/