UUID dalam pangkalan data

UUID (Pembentuk ID Unik Universal) adalah nilai 128-bit yang digunakan dalam pangkalan data, antara lain, untuk mengenal pasti entri jadual secara unik. Mereka diwakili sebagai rentetan perenambelasan yang dibahagikan kepada lima kumpulan yang dipisahkan oleh tanda sempang (Contoh: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). Terdapat banyak Perbincangan tentang kelebihan dan kekurangan UUID dalam pangkalan data - ia amat diperlukan dalam sistem teragih.


Dalam perkhidmatan mikro dan aplikasi berbilang penyewaan, adalah wajar mempertimbangkan untuk memperkenalkan UUID. Beralih daripada jenis data BigInteger kepada UUID (varian boleh disusun bagi UUID versi 4 daripada spesifikasi RFC 4122 ) dalam rangka kerja PHP Laravel dilakukan dengan cepat: Pertama, kami mencipta ciri baharu:

2aa7136d977617159be1834eaf40e871

Kemudian kami menambah semua model kami:

2aa7136d977617159be1834eaf40e871

Dalam Laravel 9⁺ ini lebih mudah lagi: di sini kita sudah mempunyai sifat HasUuids sedia untuk digunakan. Sebagai alternatif, rangka kerja juga menawarkan sokongan untuk jenis data yang berkaitan, tetapi masih tidak diketahui ULID , yang mungkin menarik kerana kebolehbacaan dan kebolehurutan yang lebih baik.

Bahagian yang sukar ialah pemindahan data sedia ada. Secara kasar seseorang boleh meneruskan seperti berikut:

  1. Tambahkan lajur UUID baharu dengan nilai kosong pada semua jadual
    (masing-masing berdasarkan semua lajur kunci utama dan asing)
  2. Tulis nilai UUID pada lajur baharu
    (dengan kunci utama menaik serta kunci asing yang dikemas kini)
  3. Padamkan lajur asal
  4. Namakan semula lajur baharu

Terdapat beberapa cabaran di sini: Proses migrasi mengambil masa yang lama dan lajur baharu dilampirkan pada penghujung jadual (penyelesaian yang mungkin: lajur resort ). Cara yang lebih langsung ialah mengubah lajur secara langsung.

Jika anda meletakkan itu PostgreSQL satu, anda boleh (selepas sandaran sebelumnya, sudah tentu) menjalankan pertanyaan berikut, sebagai contoh (sebelum itu anda boleh memadam semua jadual yang anda kecualikan dalam Z. 19/31 ganti, serta memiliki peraturan khas dalam Z. 37/39 tambah) dan salin semua pertanyaan yang dihasilkan daripadanya:

2aa7136d977617159be1834eaf40e871

Jika anda kini menjalankan pertanyaan yang dijana bersama-sama, anda telah memindahkan pangkalan data dalam masa yang singkat. Walaupun UUID yang dijana tidak mematuhi spesifikasi v4, ia mengikut susunan leksigrafik yang sama seperti entri sebelumnya, tidak bertembung dengan UUID baharu (dalam kumpulan ke-3 dalam v4 sentiasa ada 4, sentiasa satu dalam varian yang dipindahkan 0), yang juga bermaksud bahawa UUID baharu sentiasa lebih besar daripada UUID yang dipindahkan.

Selepas itu disyorkan untuk memadam 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. Sudah tentu, semuanya juga boleh dilaksanakan dalam migrasi Laravel:

2aa7136d977617159be1834eaf40e871

Selepas penukaran, seseorang menggunakan dalam migrasi masa hadapan sebaliknya bigIncrements atau. bigInteger kemudian uuid:

2aa7136d977617159be1834eaf40e871

Belakang