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
إذا قمت الآن بتنفيذ الاستعلامات التي تم إنشاؤها بشكل جماعي، فستكون قد قمت بترحيل قاعدة البيانات خلال فترة زمنية قصيرة. لا تتوافق معرفات UUID التي تم إنشاؤها بهذه الطريقة مع مواصفات الإصدار 4، ولكنها معجمية بنفس ترتيب الإدخالات السابقة، ولا تتعارض مع معرفات UUID الجديدة (يوجد دائمًا واحد في المجموعة الثالثة في الإصدار 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