UUID (شناسههای منحصربهفرد جهانی) مقادیر 128 بیتی هستند که در پایگاه داده ها از جمله برای شناسایی منحصر به فرد ورودی های جدول استفاده می شوند. آنها به عنوان یک رشته هگزا دسیمال به پنج گروه تقسیم شده توسط خط فاصله نشان داده می شوند (مثال: 09fe49b3-4d2b-471c-ac04-36c9e706b85f
). وجود دارد متعدد بحث ها در مورد مزایا و معایب UUID ها در پایگاه های داده - آنها در سیستم های توزیع شده ضروری هستند.
بنابراین در ریزسرویس ها و برنامه های چند اجاره ای، بهتر است UUID ها را معرفی کنیم. تغییر از نوع داده BigInteger به UUID (نوعی قابل مرتب سازی UUID نسخه 4 از مشخصات RFC 4122 ) در چارچوب PHP Laravel به سرعت انجام می شود: ابتدا یک ویژگی جدید ایجاد می کنیم.:
2aa7136d977617159be1834eaf40e871
سپس تمام مدل های خود را اضافه می کنیم:
2aa7136d977617159be1834eaf40e871
در لاراول 9⁺ این کار حتی ساده تر است: در اینجا ما ویژگی HasUuids را آماده استفاده داریم. متناوبا، این چارچوب همچنین از نوع داده مرتبط، اما هنوز نسبتاً ناشناخته ULID پشتیبانی میکند ، که به دلیل خوانایی و مرتبپذیری بهتر میتواند جالب باشد.
بخش دشوار، مهاجرت داده های موجود است. تقریباً می توان به صورت زیر عمل کرد:
- ستون های UUID جدید با مقادیر خالی را به همه جداول اضافه کنید
(هر کدام بر اساس تمام ستون های کلید اصلی و خارجی) - مقادیر UUID را در ستون های جدید بنویسید
(با کلیدهای اصلی صعودی به اضافه کلیدهای خارجی به روز شده) - حذف ستون های اصلی
- تغییر نام ستون های جدید
چندین چالش در اینجا وجود دارد: فرآیند مهاجرت زمان زیادی می برد و ستون های جدید به انتهای جدول اضافه می شوند (راه حل ممکن: ستون های متوسل ). یک راه بسیار مستقیم تر تبدیل ستون ها به طور مستقیم است.
اگر آن را قرار دهید PostgreSQL یک، می توانید (البته پس از پشتیبان گیری قبلی) کوئری زیر را اجرا کنید، برای مثال (قبل از آن می توانید تمام جداولی را که در Z حذف کرده اید حذف کنید. 19
/31
جایگزین کنید، و همچنین قوانین خاص خود را در Z. 37
/39
add) و تمام پرس و جوهای ایجاد شده از آن را کپی می کند:
2aa7136d977617159be1834eaf40e871
اگر اکنون کوئری های تولید شده را با هم اجرا کنید، در مدت کوتاهی پایگاه داده را منتقل کرده اید. در حالی که UUID های تولید شده به این ترتیب با مشخصات v4 مطابقت ندارند، اما از نظر لغوی به ترتیب ورودی های قبلی هستند، با UUID های جدید برخورد نمی کنند (در گروه 3 در v4 همیشه یک 4
, همیشه یکی در نوع مهاجرت شده 0
) که همچنین به این معنی است که UUID های جدید همیشه بزرگتر از UUID های مهاجرت شده هستند.
پس از آن توصیه می شود تمام کش های لاراول را حذف کنید (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*
) و جلسات در حال اجرا (rm -f storage/framework/sessions/*
) برای خالی کردن. البته، کل کار را می توان در یک مهاجرت لاراول نیز پیاده سازی کرد:
2aa7136d977617159be1834eaf40e871
پس از تبدیل، در مهاجرت های آینده به جای آن استفاده می شود bigIncrements
یا. bigInteger
سپس uuid
:
2aa7136d977617159be1834eaf40e871