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 crescătoare plus chei străine 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.

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

Înapoi