شهد الإصدار 13.36 من إطار العمل Laravel إضافة هامة للمطورين الذين يعتمدون على قواعد بيانات MySQL المستضافة في PlanetScale. هذه الإضافة هي الدالة `DB::olap()` التي تسهل التعامل مع الاستعلامات التي تتجاوز حدود الحجم الافتراضية المفروضة على قواعد بيانات PlanetScale.
تعمل قواعد بيانات MySQL في PlanetScale على Vitess، الذي يفرض قيودًا على أحمال عمل OLTP (Online Transaction Processing) الافتراضية. يمكن للاستعلام الواحد أن يُرجع أو يُحدّث أو يحذف 100,000 صف كحد أقصى، كما أن حجم مجموعة النتائج لا يتجاوز 64 ميجابايت. هذه الحدود قد تتسبب في فشل استعلامات التقارير أو تصدير ملفات CSV الكبيرة، حتى لو كانت تعمل بشكل طبيعي على خادم MySQL محلي.
لماذا DB::olap() ضرورية؟
لتجاوز هذه القيود، يوفر Vitess وضع عمل آخر يسمى OLAP (Online Analytical Processing) لا يحتوي على هذه الحدود. في السابق، كان على المطورين تبديل وضع العمل يدويًا باستخدام بيان SQL خام ضمن كتلة `try / finally`.
لكن هذا النهج اليدوي كان يحمل بعض المخاطر، مثل بقاء الاتصال في وضع OLAP إذا لم يتم استدعاء كتلة `finally`، أو إذا كانت الاستعلامات توجه إلى نسخ للقراءة (read replicas) التي قد لا تزال تعمل في وضع OLTP. الدالة `DB::olap()` الجديدة تحل هذه المشكلات بتبسيط العملية.
أضاف المطور Jack Bayliss هذه الدالة، وهي تعمل على تبديل وضع العمل إلى OLAP قبل تنفيذ دالة رد الاتصال (callback function)، ثم تُعيده إلى OLTP تلقائيًا في كتلة `finally`. كما تضمن تطبيق وضع OLAP على كل من اتصال الكتابة والقراءة، مما يضمن عمل الاستعلامات الكبيرة بغض النظر عن الاتصال المستخدم.
استخدامات عملية وتنبيهات مهمة
الدالة `DB::olap()` مثالية لمهام مثل تصدير البيانات العرضي، أو عمليات التعبئة الخلفية (backfills)، أو تقارير الإدارة التي تتطلب قراءة أكثر من 100,000 صف في استعلام واحد.
نقطة مهمة يجب الانتباه إليها هي أن الاستعلام يجب أن يتم تنفيذه بالكامل داخل دالة رد الاتصال. فأساليب مثل `cursor()` و`lazy()` و`lazyById()` تُرجع `LazyCollection` التي لا تُنفذ الاستعلام إلا عند التكرار عليها. لذلك، يجب التأكد من التكرار أو استدعاء `get()` داخل دالة رد الاتصال لضمان تنفيذ الاستعلام في وضع OLAP.
تضيف هذه الترقية أيضًا الدالة `isVitess()` إلى `MySqlConnection`، والتي تُرجع `true` إذا كان خادم قاعدة البيانات هو Vitess أو PlanetScale. تستخدم `olap()` هذا التحقق داخليًا لتحديد ما إذا كان يجب تبديل وضع العمل.
برأينا، تُقدم هذه الميزة للمطورين حلاً نظيفًا وآمنًا للتعامل مع تحديات الاستعلامات الكبيرة على PlanetScale، مما يعزز قدرة تطبيقات Laravel على معالجة البيانات الضخمة بكفاءة أكبر دون الحاجة إلى حلول معقدة. إنها أداة قيمة لتبسيط مهام إعداد التقارير وتصدير البيانات في المشاريع الكبيرة.
المصدر: laravel-news.com