UUID-uri (Identificatori de identificare unici universal) sunt valori de 128 de biți care sunt utilizate în bazele de date, printre altele, pentru a identifica în mod unic intrările din tabel. Ele sunt reprezentate ca un șir hexazecimal împărțit în cinci grupuri separate prin cratime (Exemplu: 09fe49b3-4d2b-471c-ac04-36c9e706b85f
). Există numeroase Discuții despre avantajele și dezavantajele UUID-urilor în bazele de date - sunt indispensabile în sistemele distribuite.
În microservicii și aplicațiile multi-tenancy, merită, prin urmare, să luați în considerare introducerea UUID-urilor. Trecerea de la tipul de date BigInteger la UUID (o variantă sortabilă a UUID-ului versiunea 4 din specificația RFC 4122 ) în cadrul PHP Laravel se face rapid: În primul rând, creăm o nouă trăsătură:
2aa7136d977617159be1834eaf40e871
Apoi adăugăm toate modelele noastre:
2aa7136d977617159be1834eaf40e871
În Laravel 9⁺ acest lucru este și mai ușor: aici avem deja trăsătura HasUuids gata de utilizat. Alternativ, cadrul oferă și suport pentru tipul de date asociat, dar încă necunoscut, ULID , care ar putea fi interesant datorită unei mai bune lizibilități și sortabilități.
Partea dificilă este migrarea datelor existente. Aproximativ se poate proceda după cum urmează:
- Adăugați noi coloane UUID cu valori goale la toate tabelele
(fiecare bazat pe toate coloanele de cheie primară și străină) - Scrieți valorile UUID în noile coloane
(cu chei primare crescătoare plus chei străine actualizate) - Ștergeți coloanele originale
- Redenumiți coloanele noi
Există mai multe provocări aici: Procesul de migrare durează mult și coloane noi sunt atașate la sfârșitul tabelului (soluție posibilă: coloane de resort ). O modalitate mult mai directă este transformarea directă a coloanelor.
Daca pui asta PostgreSQL unul, puteți (după o copie de siguranță anterioară, desigur) să rulați următoarea interogare, de exemplu (înainte de aceasta puteți șterge toate tabelele pe care le excludeți în Z. 19
/31
înlocuiți, precum și propriile reguli speciale în Z. 37
/39
add) și copiază toate interogările generate din acesta:
2aa7136d977617159be1834eaf40e871
Dacă acum rulați interogările generate împreună, ați migrat baza de date într-un timp scurt. În timp ce UUID-urile astfel generate nu sunt conforme cu specificația v4, ele sunt lexigrafic în aceeași ordine ca intrările anterioare, nu se ciocnesc cu noile UUID-uri (în al treilea grup din v4 există întotdeauna un 4
, întotdeauna unul în varianta migrată 0
), ceea ce înseamnă, de asemenea, că noile UUID-uri sunt întotdeauna mai mari decât UUID-urile migrate.
După aceea, este recomandat să ștergeți toate cache-urile 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 sesiuni de rulare (rm -f storage/framework/sessions/*
) a goli. Desigur, totul poate fi implementat și în cadrul unei migrari Laravel:
2aa7136d977617159be1834eaf40e871
După conversie, se folosește în migrațiile viitoare bigIncrements
sau. bigInteger
apoi uuid
:
2aa7136d977617159be1834eaf40e871