UUID (Entifier Id Unik Universal) adalah nilai 128-bit yang digunakan dalam database, antara lain, untuk mengidentifikasi entri tabel secara unik. Mereka direpresentasikan sebagai string heksadesimal yang dibagi menjadi lima kelompok yang dipisahkan oleh tanda hubung (contoh: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). Ada banyak sekali Diskusi tentang kelebihan dan kekurangan UUID dalam database - mereka sangat diperlukan dalam sistem terdistribusi.
Dalam layanan mikro dan aplikasi multi-tenancy, oleh karena itu perlu dipertimbangkan untuk memperkenalkan UUID. Beralih dari tipe data BigInteger ke UUID (varian yang dapat diurutkan dari UUID versi 4 dari spesifikasi RFC 4122 ) dalam kerangka PHP Laravel dilakukan dengan cepat: Pertama, kita membuat sifat baru:
2aa7136d977617159be1834eaf40e871
Kemudian kami menambahkan semua model kami:
2aa7136d977617159be1834eaf40e871
Di Laravel 9⁺ ini bahkan lebih mudah: di sini kita sudah memiliki sifat HasUuids yang siap digunakan. Atau, kerangka kerja juga menawarkan dukungan untuk ULID tipe data terkait, tetapi masih agak tidak dikenal, yang mungkin menarik karena keterbacaan dan keterurutan yang lebih baik.
Bagian yang sulit adalah migrasi data yang ada. Kira-kira seseorang dapat melanjutkan sebagai berikut:
- Tambahkan kolom UUID baru dengan nilai kosong ke semua tabel
(masing-masing berdasarkan semua kolom kunci utama dan asing) - Tulis nilai UUID ke kolom baru.
(dengan kunci utama yang diurutkan menaik dan kunci asing yang diperbarui) - Hapus kolom asli
- Ganti nama kolom baru
Ada beberapa tantangan di sini: Proses migrasi memakan waktu lama dan kolom baru ditambahkan ke akhir tabel (solusi yang mungkin: kolom resor ). Cara yang jauh lebih langsung adalah dengan mengubah kolom secara langsung.
Jika Anda meletakkan PostgreSQL Untuk melakukan ini, Anda dapat (setelah melakukan pencadangan sebelumnya, tentu saja) menjalankan kueri berikut, misalnya (sebelumnya Anda dapat mencantumkan semua tabel yang ingin Anda kecualikan di Z). 19/31 ganti serta aturan khusus Anda sendiri di Z. 37/39 tambahkan) dan salin semua kueri yang dihasilkan darinya:
2aa7136d977617159be1834eaf40e871
Jika sekarang Anda menjalankan kueri yang dihasilkan secara kolektif, Anda akan memigrasikan database dalam waktu singkat. UUID yang dibuat dengan cara ini tidak sesuai dengan spesifikasi v4, tetapi secara leksikografisnya sama dengan entri sebelumnya, tidak bertabrakan dengan UUID baru (selalu ada satu di grup ke-3 di v4 4, selalu satu dalam varian yang dimigrasi 0), yang juga berarti bahwa UUID baru selalu lebih besar dari UUID yang dimigrasikan.
Setelah itu, disarankan untuk menemukan semua 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/*/*) dan menjalankan sesi (rm -f storage/framework/sessions/*) untuk mengosongkan. Tentu saja, semuanya juga dapat diimplementasikan dalam migrasi Laravel:
2aa7136d977617159be1834eaf40e871
Setelah konversi yang digunakan dalam migrasi mendatang sebagai gantinya bigIncrements atau. bigInteger kemudian uuid:
2aa7136d977617159be1834eaf40e871