UUID-k az adatbázisokban

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:

  1. Adjon hozzá új UUID oszlopokat üres értékekkel az összes táblázathoz
    (mindegyik az összes elsődleges és idegen kulcs oszlopon alapul)
  2. Írja be az UUID értékeket az új oszlopokba
    (növekvő elsődleges kulcsokkal és frissített idegen kulcsokkal)
  3. Eredeti oszlopok törlése
  4. Ú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

Vissza