UUID-k (Univerzálisan egyedi azonosítók) 128 bites értékek, amelyeket az adatbázisokban használnak, többek között a táblabejegyzések egyedi azonosítására. Hexadecimális karakterláncként vannak ábrázolva, amelyeket öt csoportra osztanak, amelyeket kötőjellel választanak el (példa: 09fe49b3-4d2b-471c-ac04-36c9e706b85f
). Van számos Viták az adatbázisokban található UUID-k előnyeiről és hátrányairól – az elosztott rendszerekben nélkülözhetetlenek.
A mikroszolgáltatásokban és a többbérletes alkalmazásokban ezért érdemes megfontolni az UUID-k bevezetését. A BigInteger adattípusról az UUID-re (az UUID 4-es verziójának rendezhető változata az RFC 4122 specifikációból) a PHP keretrendszerben a Laravel gyorsan megtörténik: Először is létrehozunk egy új tulajdonságot .:
2aa7136d977617159be1834eaf40e871
Ezután hozzáadjuk az összes modellünket:
2aa7136d977617159be1834eaf40e871
A Laravel 9⁺-ben ez még egyszerűbb: itt már használatra készen áll a HasUuids tulajdonság. Alternatív megoldásként a keretrendszer támogatja a kapcsolódó, de még meglehetősen ismeretlen ULID adattípust is , ami a jobb olvashatóság és rendezhetőség miatt lehet érdekes.
A nehéz rész a meglévő adatok migrálása. Nagyjából a következőképpen lehetne eljárni:
- Adjon hozzá új UUID oszlopokat üres értékekkel az összes táblázathoz
(mindegyik az összes elsődleges és idegen kulcs oszlopon alapul) - Írja be az UUID értékeket az új oszlopokba
(növekvő elsődleges kulcsokkal és frissített idegen kulcsokkal) - Eredeti oszlopok törlése
- Új oszlopok átnevezése
Itt több kihívás is adódik: Az átállási folyamat sokáig tart, és új oszlopok kerülnek a táblázat végére (lehetséges megoldás: resort oszlopok ). Sokkal közvetlenebb módja az oszlopok közvetlen átalakítása.
Ha felteszed PostgreSQL az egyik, (természetesen egy korábbi biztonsági mentés után) lefuttathatja például a következő lekérdezést (előtte törölheti az összes Z-ben kizárt táblát. 19
/31
cserélni, valamint saját speciális szabályokat a Z. 37
/39
add), és lemásolja az abból generált összes lekérdezést:
2aa7136d977617159be1834eaf40e871
Ha most együtt futtatja a generált lekérdezéseket, akkor rövid időn belül áttelepítette az adatbázist. Bár az így előállított UUID-k nem felelnek meg a v4 specifikációnak, lexigráfiailag ugyanabban a sorrendben vannak, mint az előző bejegyzések, nem ütköznek új UUID-kkel (a v4 3. csoportjában mindig van egy 4
, mindig egy a migrált változatban 0
), ami azt is jelenti, hogy az új UUID-k mindig nagyobbak, mint az áttelepített UUID-k.
Ezt követően javasolt az összes Laravel gyorsítótár törlése (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*
) és futó foglalkozások (rm -f storage/framework/sessions/*
) kiüríteni. Természetesen az egész egy Laravel migráción belül is megvalósítható:
2aa7136d977617159be1834eaf40e871
Az átalakítás után a jövőbeni áttelepítéseknél ezt használja bigIncrements
vagy. bigInteger
azután uuid
:
2aa7136d977617159be1834eaf40e871