UUID-uri în baze de date

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ă:

  1. Adăugați noi coloane UUID cu valori goale la toate tabelele
    (fiecare bazat pe toate coloanele de cheie primară și străină)
  2. Scrieți valorile UUID în noile coloane
    (cu chei primare ascendente și chei externe actualizate)
  3. Ștergeți coloanele originale
  4. 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

Înapoi