UUID ing database

UUID (Pengikat ID Unik Universal) yaiku nilai 128-bit sing digunakake ing basis data, antara liya, kanggo ngenali entri tabel kanthi unik. Iki diwakili minangka senar heksadesimal sing dipérang dadi limang klompok sing dipisahake nganggo tanda hubung (Contone: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). ana akeh Rembugan babagan kaluwihan lan cacat UUIDs ing database - padha indispensable ing sistem mbagekke.


Ing layanan mikro lan aplikasi multi-tenancy, mula kudu dipikirake kanggo ngenalake UUID. Ngalih saka jinis data BigInteger menyang UUID (varian bisa diurutake saka UUID versi 4 saka spesifikasi RFC 4122 ) ing kerangka PHP Laravel rampung kanthi cepet: Kaping pisanan, kita nggawe sipat anyar.:

2aa7136d977617159be1834eaf40e871

Banjur kita nambah kabeh model kita:

2aa7136d977617159be1834eaf40e871

Ing Laravel 9⁺ iki luwih gampang: ing kene kita wis duwe sipat HasUuids sing siap digunakake. Utawa, kerangka uga nawakake dhukungan kanggo jinis data sing gegandhengan, nanging isih ora dingerteni ULID , sing bisa uga menarik amarga keterbacaan lan sortability sing luwih apik.

Sisih angel yaiku migrasi data sing wis ana. Kira-kira siji bisa nerusake kaya ing ngisor iki:

  1. Tambah kolom UUID anyar kanthi nilai kosong ing kabeh tabel
    (saben adhedhasar kabeh kolom kunci primer lan asing)
  2. Tulis nilai UUID menyang kolom anyar
    (kanthi kunci utama munggah ditambah kunci asing sing dianyari)
  3. Mbusak kolom asli
  4. Ganti jeneng kolom anyar

Ana sawetara tantangan kene: Proses migrasi njupuk wektu dawa lan kolom anyar ditambahake ing mburi meja (solusi bisa: kolom resort ). Cara sing luwih langsung yaiku ngowahi kolom kanthi langsung.

Yen sampeyan sijine iku PostgreSQL siji, sampeyan bisa (sawise serep sadurunge, mesthi) mbukak pitakon ing ngisor iki, contone (sadurunge sampeyan bisa mbusak kabeh tabel sing ora kalebu ing Z. 19/31 ngganti, uga duwe aturan khusus ing Z. 37/39 nambah) lan nyalin kabeh pitakon sing digawe saka iku:

2aa7136d977617159be1834eaf40e871

Yen saiki sampeyan mbukak pitakon sing digawe bebarengan, sampeyan wis migrasi database ing wektu sing cendhak. Nalika UUID sing diasilake ora cocog karo spesifikasi v4, kanthi leksigrafis padha karo entri sadurunge, ora tabrakan karo UUID anyar (ing grup kaping 3 ing v4 mesthi ana 4, tansah siji ing varian migrasi 0), sing uga tegese UUID anyar mesthi luwih gedhe tinimbang UUID sing dimigrasi.

Sawise iku dianjurake kanggo mbusak kabeh 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/*/*) lan sesi mlaku (rm -f storage/framework/sessions/*) kanggo kosong. Mesthi wae, kabeh uga bisa ditindakake ing migrasi Laravel:

2aa7136d977617159be1834eaf40e871

Sawise konversi siji digunakake ing migrasi mangsa tinimbang bigIncrements utawa. bigInteger banjur uuid:

2aa7136d977617159be1834eaf40e871

Bali