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
    (karo kunci utama munggah lan 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 masang PostgreSQL Kanggo nindakake iki, sampeyan bisa (sawise nggawe serep sadurunge, mesthi) nglakokake query ing ngisor iki, contone (sadurunge sampeyan bisa ndhaptar kabeh tabel sing pengin diilangi ing Z). 19/31 ngganti uga aturan khusus sampeyan dhewe ing Z. 37/39 nambah) lan nyalin kabeh pitakon sing digawe saka iku:

2aa7136d977617159be1834eaf40e871

Yen sampeyan saiki nglakokake pitakon sing digawe bebarengan, sampeyan bakal migrasi database ing wektu sing cendhak. UUID sing digawe kanthi cara iki ora tundhuk karo spesifikasi v4, nanging kanthi leksikografis ing urutan sing padha karo entri sadurunge, ora tabrakan karo UUID anyar (mesthi ana siji ing grup 3rd ing v4. 4, tansah siji ing varian migrasi 0), sing uga tegese UUID anyar mesthi luwih gedhe tinimbang UUID sing dimigrasi.

Sawisé kuwi, disaranake kanggo nemokake 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