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 ascendente și chei externe 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.
Dacă pui PostgreSQL Pentru a face acest lucru, puteți (după o copie de rezervă prealabilă, desigur) executa următoarea interogare, de exemplu (înainte puteți lista toate tabelele pe care doriți să le excludeți din Z). 19/31 înlocuiți precum și propriile reguli speciale din Z. 37/39 add) și copiază toate interogările generate din acesta:
2aa7136d977617159be1834eaf40e871
Dacă acum executați interogările generate în mod colectiv, veți fi migrat baza de date în scurt timp. UUID-urile create în acest fel nu respectă specificația v4, dar sunt lexicografic în aceeași ordine ca intrările anterioare, nu se ciocnesc cu UUID-uri noi (există întotdeauna unul în al 3-lea grup în v4 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, se recomandă găsirea tuturor cache-urilor 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