Identyfikatory UUID (Uniwersalnie unikalne entyfikatory identyfikatorów) to wartości 128-bitowe, które wykorzystywane są w bazach danych między innymi do jednoznacznej identyfikacji wpisów w tabelach. Są one reprezentowane jako ciąg szesnastkowy podzielony na pięć grup oddzielonych myślnikami (np: 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:
- Dodaj nowe kolumny UUID z pustymi wartościami do wszystkich tabel
(każdy oparty na wszystkich kolumnach klucza podstawowego i obcego) - Zapisz wartości UUID w nowych kolumnach
(z rosnącymi kluczami podstawowymi i zaktualizowanymi kluczami obcymi) - Usuń oryginalne kolumny
- 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 umieścisz PostgreSQL Aby to zrobić, możesz (oczywiście po wcześniejszym wykonaniu kopii zapasowej) wykonać na przykład następujące zapytanie (wcześniej możesz wyświetlić listę wszystkich tabel, które chcesz wykluczyć z Z). 19/31 zamień, a także własne specjalne zasady w Z. 37/39 dodaj) i kopiuje wszystkie wygenerowane z niego zapytania:
2aa7136d977617159be1834eaf40e871
Jeśli teraz wykonasz zbiorczo wygenerowane zapytania, migracja bazy danych będzie miała miejsce w krótkim czasie. Powstałe w ten sposób UUID nie są zgodne ze specyfikacją v4, ale leksykograficznie są w tej samej kolejności, co poprzednie wpisy, nie kolidują z nowymi UUID (w v4 zawsze jest jeden w 3 grupie 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ę znalezienie wszystkich pamięci podręcznych Laravel (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