UUIDs في قواعد البيانات

UUIDs (منشطات الهوية الفريدة عالميًا) هي قيم 128 بت تُستخدم في قواعد البيانات ، من بين أشياء أخرى ، لتعريف إدخالات الجدول بشكل فريد. يتم تمثيلها كسلسلة سداسية عشرية مقسمة إلى خمس مجموعات مفصولة بواصلات (مثال: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). يوجد كثير مناقشات حول مزايا وعيوب UUIDs في قواعد البيانات - لا غنى عنها في الأنظمة الموزعة.


في الخدمات المصغرة والتطبيقات متعددة المستأجرين ، يجدر النظر في تقديم UUIDs. التبديل من نوع البيانات BigInteger إلى UUID (متغير قابل للفرز للإصدار 4 من UUID من مواصفات RFC 4122 ) في إطار عمل PHP Laravel يتم بسرعة: أولاً ، نقوم بإنشاء سمة جديدة:

2aa7136d977617159be1834eaf40e871

ثم نضيف كل نماذجنا:

2aa7136d977617159be1834eaf40e871

هذا أسهل في Laravel 9⁺: لدينا هنا بالفعل سمة HasUuids جاهزة للاستخدام. بدلاً من ذلك ، يوفر إطار العمل أيضًا دعمًا لنوع البيانات ذات الصلة ، ولكن لا تزال غير معروفة إلى حد ما ، والتي قد تكون مثيرة للاهتمام بسبب سهولة القراءة والفرز بشكل أفضل.

الجزء الصعب هو ترحيل البيانات الموجودة. تقريبا يمكن للمرء المضي قدما على النحو التالي:

  1. أضف أعمدة UUID جديدة بقيم فارغة إلى كافة الجداول
    (يعتمد كل منها على جميع أعمدة المفاتيح الأساسية والأجنبية)
  2. اكتب قيم UUID إلى الأعمدة الجديدة
    (مع مفاتيح أساسية تصاعدية بالإضافة إلى مفاتيح خارجية محدثة)
  3. احذف الأعمدة الأصلية
  4. إعادة تسمية الأعمدة الجديدة

هناك العديد من التحديات هنا: تستغرق عملية الترحيل وقتًا طويلاً ويتم إلحاق أعمدة جديدة بنهاية الجدول (الحل المحتمل: أعمدة المنتجع ). هناك طريقة مباشرة أكثر وهي تحويل الأعمدة مباشرة.

إذا وضعت ذلك 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

عودة