UUID në bazat e të dhënave

UUID (Entifikuesit universalisht unikëID -së) janë vlera 128-bit që përdoren në bazat e të dhënave, ndër të tjera, për të identifikuar në mënyrë unike hyrjet e tabelës. Ato përfaqësohen si një varg heksadecimal i ndarë në pesë grupe të ndara me vizë (Shembull: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). ka të shumta Diskutimet në lidhje me avantazhet dhe disavantazhet e UUID-ve në bazat e të dhënave - ato janë të domosdoshme në sistemet e shpërndara.


Në mikroshërbimet dhe aplikacionet me shumë qira, prandaj ia vlen të merret parasysh prezantimi i UUID-ve. Kalimi nga lloji i të dhënave BigInteger në UUID (një variant i klasifikueshëm i versionit 4 UUID nga specifikimi RFC 4122 ) në kuadrin PHP Laravel bëhet shpejt: Së pari, ne krijojmë një tipar të ri:

2aa7136d977617159be1834eaf40e871

Më pas shtojmë të gjitha modelet tona:

2aa7136d977617159be1834eaf40e871

Në Laravel 9⁺ kjo është edhe më e lehtë: këtu tashmë kemi veçorinë HasUuids gati për t'u përdorur. Përndryshe, korniza ofron gjithashtu mbështetje për llojin e të dhënave të lidhur, por ende mjaft të panjohur ULID , i cili mund të jetë interesant për shkak të lexueshmërisë dhe renditshmërisë më të mirë.

Pjesa e vështirë është migrimi i të dhënave ekzistuese. Përafërsisht mund të veprohet si më poshtë:

  1. Shtoni kolona të reja UUID me vlera boshe në të gjitha tabelat
    (secila bazuar në të gjitha kolonat kryesore dhe të huaja të çelësit)
  2. Shkruani vlerat UUID në kolonat e reja
    (me çelësat kryesorë në rritje plus çelësat e huaj të përditësuar)
  3. Fshi kolonat origjinale
  4. Riemërtoni kolonat e reja

Këtu ka disa sfida: Procesi i migrimit kërkon një kohë të gjatë dhe kolona të reja shtohen në fund të tabelës (zgjidhja e mundshme: kolonat turistike ). Një mënyrë shumë më e drejtpërdrejtë është transformimi i kolonave drejtpërdrejt.

Nëse e vendosni atë PostgreSQL një, ju mund (pas një kopje rezervë të mëparshme, natyrisht) të ekzekutoni pyetjen e mëposhtme, për shembull (para kësaj mund të fshini të gjitha tabelat që përjashtoni në Z. 19/31 zëvendësojë, si dhe rregullat e veta të veçanta në Z. 37/39 add) dhe kopjon të gjitha pyetjet e krijuara prej tij:

2aa7136d977617159be1834eaf40e871

Nëse tani i drejtoni pyetjet e krijuara së bashku, ju keni migruar bazën e të dhënave brenda një kohe të shkurtër. Ndërsa UUID-të e krijuara në këtë mënyrë nuk përputhen me specifikimin v4, ato janë leksigrafisht në të njëjtin rend si hyrjet e mëparshme, nuk përplasen me UUID-të e reja (në grupin e 3-të në v4 ka gjithmonë një 4, gjithmonë një në variantin e migruar 0), që do të thotë gjithashtu se UUID-të e reja janë gjithmonë më të mëdha se UUID-të e migruara.

Pas kësaj, rekomandohet të fshini të gjitha cache Laravel (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*) dhe sesionet e drejtimit (rm -f storage/framework/sessions/*) për të zbrazur. Sigurisht, e gjithë kjo mund të zbatohet edhe brenda një migrimi Laravel:

2aa7136d977617159be1834eaf40e871

Pas konvertimit përdoret në migrimet e ardhshme bigIncrements ose. bigInteger pastaj uuid:

2aa7136d977617159be1834eaf40e871

Mbrapa