UUIDs (منشطات الهوية الفريدة عالميًا) هي قيم 128 بت تُستخدم في قواعد البيانات ، من بين أشياء أخرى ، لتعريف إدخالات الجدول بشكل فريد. يتم تمثيلها كسلسلة سداسية عشرية مقسمة إلى خمس مجموعات مفصولة بواصلات (مثال: 09fe49b3-4d2b-471c-ac04-36c9e706b85f
). يوجد كثير مناقشات حول مزايا وعيوب UUIDs في قواعد البيانات - لا غنى عنها في الأنظمة الموزعة.
في الخدمات المصغرة والتطبيقات متعددة المستأجرين ، يجدر النظر في تقديم UUIDs. التبديل من نوع البيانات BigInteger إلى UUID (متغير قابل للفرز للإصدار 4 من UUID من مواصفات RFC 4122 ) في إطار عمل PHP Laravel يتم بسرعة: أولاً ، نقوم بإنشاء سمة جديدة:
2aa7136d977617159be1834eaf40e871
ثم نضيف كل نماذجنا:
2aa7136d977617159be1834eaf40e871
هذا أسهل في Laravel 9⁺: لدينا هنا بالفعل سمة HasUuids جاهزة للاستخدام. بدلاً من ذلك ، يوفر إطار العمل أيضًا دعمًا لنوع البيانات ذات الصلة ، ولكن لا تزال غير معروفة إلى حد ما ، والتي قد تكون مثيرة للاهتمام بسبب سهولة القراءة والفرز بشكل أفضل.
الجزء الصعب هو ترحيل البيانات الموجودة. تقريبا يمكن للمرء المضي قدما على النحو التالي:
- أضف أعمدة UUID جديدة بقيم فارغة إلى كافة الجداول
(يعتمد كل منها على جميع أعمدة المفاتيح الأساسية والأجنبية) - اكتب قيم UUID إلى الأعمدة الجديدة
(مع مفاتيح أساسية تصاعدية بالإضافة إلى مفاتيح خارجية محدثة) - احذف الأعمدة الأصلية
- إعادة تسمية الأعمدة الجديدة
هناك العديد من التحديات هنا: تستغرق عملية الترحيل وقتًا طويلاً ويتم إلحاق أعمدة جديدة بنهاية الجدول (الحل المحتمل: أعمدة المنتجع ). هناك طريقة مباشرة أكثر وهي تحويل الأعمدة مباشرة.
إذا وضعت ذلك PostgreSQL أولاً ، يمكنك (بعد نسخة احتياطية سابقة ، بالطبع) تشغيل الاستعلام التالي ، على سبيل المثال (قبل ذلك يمكنك حذف جميع الجداول التي استبعدتها في Z. 19
/31
استبدال ، وكذلك القواعد الخاصة الخاصة في Z. 37
/39
add) ونسخ جميع الاستعلامات الناتجة عنه:
2aa7136d977617159be1834eaf40e871
إذا قمت الآن بتشغيل الاستعلامات التي تم إنشاؤها معًا ، فقد قمت بترحيل قاعدة البيانات في غضون وقت قصير. في حين أن UUIDs التي تم إنشاؤها على هذا النحو لا تتوافق مع مواصفات v4 ، فهي معجمية بنفس ترتيب الإدخالات السابقة ، ولا تتعارض مع UUIDs الجديدة (في المجموعة الثالثة في الإصدار 4 يوجد دائمًا 4
, دائمًا واحد في المتغير الذي تم ترحيله 0
) ، مما يعني أيضًا أن UUIDs الجديدة دائمًا ما تكون أكبر من UUIDs التي تم ترحيلها.
بعد ذلك يوصى بحذف جميع مخابئ Laravel (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/*
) لإفراغ. بالطبع ، يمكن أيضًا تنفيذ الأمر برمته ضمن ترحيل Laravel:
2aa7136d977617159be1834eaf40e871
بعد التحويل يستخدم المرء في عمليات الترحيل المستقبلية بدلاً من ذلك bigIncrements
أو. bigInteger
ومن بعد uuid
:
2aa7136d977617159be1834eaf40e871