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 në tabelë. 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ësa primarë në ngjitje dhe çelësa të huaj të përditësuar)
  3. Fshi kolonat origjinale
  4. Riemërto 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 vendosni PostgreSQL Për ta bërë këtë, mund të ekzekutoni (pas një kopjeje rezervë paraprake, sigurisht) pyetjen e mëposhtme, për shembull (paraprakisht mund të listoni të gjitha tabelat që dëshironi të përjashtoni në Z). 19/31 zëvendësoni si dhe rregullat tuaja të veçanta në Z. 37/39 add) dhe kopjon të gjitha pyetjet e krijuara prej tij:

2aa7136d977617159be1834eaf40e871

Nëse tani i ekzekutoni pyetjet e krijuara kolektivisht, do të keni migruar bazën e të dhënave brenda një kohe të shkurtër. UUID-të e krijuara në këtë mënyrë nuk përputhen me specifikimin v4, por ato janë leksikografikisht në të njëjtin rend si hyrjet e mëparshme, nuk përplasen me UUID-të e reja (gjithmonë ka një në grupin e 3-të në v4 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ë gjeni të gjitha memorjet e fshehta të 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