UUID dalam database

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:

  1. Tambahkan kolom UUID baru dengan nilai kosong ke semua tabel
    (masing-masing berdasarkan semua kolom kunci utama dan asing)
  2. Tulis nilai UUID ke kolom baru
    (dengan kunci utama naik ditambah kunci asing yang diperbarui)
  3. Hapus kolom asli
  4. 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 menempatkan itu PostgreSQL satu, Anda dapat (setelah pencadangan sebelumnya, tentu saja) menjalankan kueri berikut, misalnya (sebelum itu Anda dapat menghapus semua tabel yang Anda kecualikan di Z. 19/31 ganti, serta memiliki aturan khusus di Z. 37/39 tambahkan) dan salin semua kueri yang dihasilkan darinya:

2aa7136d977617159be1834eaf40e871

Jika sekarang Anda menjalankan kueri yang dihasilkan bersama-sama, Anda telah memigrasikan database dalam waktu singkat. Sementara UUID yang dihasilkan tidak sesuai dengan spesifikasi v4, mereka secara leksigrafis dalam urutan yang sama seperti entri sebelumnya, tidak bertabrakan dengan UUID baru (dalam grup ke-3 di v4 selalu ada 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 menghapus 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

Kembali