UUID w bazach danych

Identyfikatory UUID (Uniwersalnie unikalne entyfikatory identyfikatorów) to wartości 128-bitowe, które są wykorzystywane w bazach danych między innymi do jednoznacznej identyfikacji wpisów w tabeli. Są reprezentowane jako ciąg szesnastkowy podzielony na pięć grup oddzielonych myślnikami (Przykład: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). Jest liczny Dyskusje o zaletach i wadach UUID w bazach danych - są one niezbędne w systemach rozproszonych.


W mikroserwisach i aplikacjach wielodostępnych warto zatem rozważyć wprowadzenie identyfikatorów UUID. Przejście z typu danych BigInteger na UUID (sortowalny wariant UUID w wersji 4 ze specyfikacji RFC 4122 ) we frameworku PHP Laravel odbywa się szybko: Najpierw tworzymy nową cechę:

2aa7136d977617159be1834eaf40e871

Następnie dodajemy wszystkie nasze modele:

2aa7136d977617159be1834eaf40e871

W Laravel 9⁺ jest to jeszcze prostsze: tutaj mamy już gotową cechę HasUuids . Alternatywnie framework oferuje również obsługę powiązanego, ale wciąż nieznanego typu danych ULID , co może być interesujące ze względu na lepszą czytelność i sortowalność.

Trudną częścią jest migracja istniejących danych. Z grubsza można postąpić w następujący sposób:

  1. Dodaj nowe kolumny UUID z pustymi wartościami do wszystkich tabel
    (każdy oparty na wszystkich kolumnach klucza podstawowego i obcego)
  2. Wpisz wartości UUID do nowych kolumn
    (z rosnącymi kluczami podstawowymi oraz zaktualizowanymi kluczami obcymi)
  3. Usuń oryginalne kolumny
  4. Zmień nazwy nowych kolumn

Jest tu kilka wyzwań: Proces migracji zajmuje dużo czasu, a nowe kolumny są dodawane na końcu tabeli (możliwe rozwiązanie: kolumny resort ). O wiele bardziej bezpośrednim sposobem jest bezpośrednie przekształcenie kolumn.

Jeśli to umieścisz PostgreSQL jeden, możesz (oczywiście po wykonaniu poprzedniej kopii zapasowej) uruchomić następujące zapytanie, na przykład (przedtem możesz usunąć wszystkie tabele wykluczone w Z. 19/31 wymienić, a także własne specjalne zasady w Z. 37/39 dodaj) i kopiuje wszystkie wygenerowane z niego zapytania:

2aa7136d977617159be1834eaf40e871

Jeśli teraz uruchomisz wygenerowane zapytania razem, migracja bazy danych nastąpi w krótkim czasie. Chociaż wygenerowane w ten sposób UUID nie są zgodne ze specyfikacją v4, są one leksygraficznie w tej samej kolejności co poprzednie wpisy, nie kolidują z nowymi UUID (w trzeciej grupie w v4 zawsze występuje 4, zawsze jeden w wariancie migrowanym 0), co oznacza również, że nowe identyfikatory UUID są zawsze większe niż migrowane identyfikatory UUID.

Następnie zaleca się usunięcie wszystkich skrytek Laravela (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*) i prowadzenie sesji (rm -f storage/framework/sessions/*) opróżnić. Oczywiście całość może być również zaimplementowana w ramach migracji Laravel:

2aa7136d977617159be1834eaf40e871

Po konwersji używa się go w przyszłych migracjach bigIncrements lub. bigInteger następnie uuid:

2aa7136d977617159be1834eaf40e871

Plecy