مشاهدة مُفَهَّرَسَة لتجميع المقاييس

يعتبر Microsoft Azure SQL منصة قاعدة بيانات مُدارة بالكامل وقوية مصممة للاستعلام عن الأداء العالي وتخزين البيانات العلاقوية والتحليل. بالنسبة لتطبيق الويب النموذجي مع جزء خلفي، فإنه خيار جيد عندما نرغب في النظر في قاعدة بيانات مُدارة يمكن أن توسع بشكل رأسي وأفقي.

يولّد برنامج التطبيق مقاييس المستخدمين يوميًا، والتي يمكن استخدامها للتقارير أو التحليلات. Azure SQL هو خيار رائع للنظر في تخزين هذه البيانات واستعلامها تحت ظروف معينة:

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

لنأخذ مثالًا على موقع حجز الفنادق الذي يعمل بنظام Azure SQL في الخلفية. نحن نرغب في رؤية لوحة تحكم واجهة المستخدم لتتبع نشاط المستخدمين، مثل النقرات على الموقع، الزيارات إلى صفحة وصف الفندق، الحجوزات المُنجزة، إلخ.

لنفترض أن جميع هذه البيانات الدلالية يتم تخزينها لكل مستخدم يوميًا في تخزين غير منظم، ونقوم بسحب هذه البيانات إلى قاعدة البيانات الخاصة بنا باستخدام وظائف الخلفية، مثل Apache Airflow.

أدناه هي مخطط الجدول لجدول المستخدمين وجدول لتخزين المقاييس اليومية.

MS SQL

 

يمكنك استخلاص العديد من الأفكار من الجداول أعلاه.

لننظر إلى مثال معين. نحتاج إلى تجميع مقاييس النشاط اليومي مجمعة حسب التاريخ بترتيب تنازلي للعملاء الذين تتراوح أعمارهم بين 30 و 40 عامًا والموجودين في مدينة نيويورك. أدناه هو الاستعلام:

MS SQL

 

الآن، يمكننا تحليل الاتجاهات اليومية لهذه المجموعة من المستخدمين الذين يتواجدون في نيويورك وتتراوح أعمارهم بين 30 و 40 عامًا. الجدول يعمل بشكل جيد بشكل عام، ونحن قادرون على إجراء استعلامات المدى بسهولة عبر عدة أشهر. في النهاية، تنمو متطلباتنا. نريد الآن تتبع سلوك المستخدم في نطاق أسبوعي أو شهري. ولكن جدولنا يخزن البيانات على أساس يومي. لدينا الآن خيارين:

  • استعلم الجدول وقم بتجميع date_created أسبوعيًا أو شهريًا، اعتمادًا على الطلب.
  •  إنشاء عدد من العروض التي تجمع البيانات على أساس أسبوعي أو شهري لكل مستخدم. انظر الاستعلام أدناه:
MS SQL

 

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

لمعالجة هذه القضايا، يقدم Azure SQL Server ميزة رائعة تعرف باسم  عرض مفهرسIndexed View. العرض المفهرس هو تمثيل مادي لعرض مخزن في قاعدة البيانات مع فهرس متجمع فريد. يتم تحديث العرض المفهرس تلقائيًا عند حدوث تغييرات في الجداول الأساسية للحفاظ على التزامن. يستخدم فهرس متجمع ينظم البيانات في العرض بناءً على ترتيب مفاتيح الفهرس.

العرض المفهرس مثالي للسيناريوهات التي نحتاج فيها إلى بيانات في الوقت الحقيقي، وتكون استعلاماتنا تتضمن عمليات انضمام متعددة الجداول معقدة. كما أنه مناسب لحالة الاستخدام الخاصة بنا حيث يتم تحديث البيانات الموجودة نادرًا ولكن يتم الاستعلام عنها بشكل متكرر، ولدينا استعلامات تعتمد على المدى ونريد القيام باسترجاع مرتب.

هناك بعض الأمور التي يجب مراعاتها قبل اتخاذ قرار بشأن ما إذا كنت تريد استخدام العروض المفهرسة. لا يمكن أن تحتوي العروض المفهرسة على دوال غير حتمية. الدالة غيرالحتمية هي دالة لا تعيد دائمًا نفس النتيجة لنفس المدخلات، حتى عند تنفيذها بنفس المعاملات وتحت نفس ظروف قاعدة البيانات. أيضًا، العرض المفهرس هو هيكل فعلي يتطلب تخزينًا، مشابهًا لعرض مادي.

بناء الجملة لإنشاء عرض مفهرس مشابه لاستعلام إنشاء العرض أعلاه. ومع ذلك، لا يمكننا استخدام الدوال غير الحتمية أثناء إنشاء عرض مفهرس. السطر DATEADD(DAY, -(DATEPART(WEEKDAY, date) - 1), date) AS week_start في استعلام العرض أعلاه يعتمد على إعداد SET DATEFIRST الخاص بالجلسة، والذي يحدد اليوم الأول من الأسبوع. يعتبر هذا غير حتمي لأنه سينتج نتائج مختلفة لظروف مختلفة.

عند الأخذ بعين الاعتبار المذكور أعلاه، يمكننا المضي قدمًا في القضاء على الحساب غير القطعي من خلال جعل العمود قطعيًا. نضيف عمودًا بعنوان week_start إلى الجدول الأساسي ونقوم بحساب وملء قيمة week_start في الجدول لاسترداد البيانات اليومية مُسبقًا. لذلك، الصفوف ذات التواريخ D1 إلى D7 تنتمي إلى W1، والتواريخ D8 إلى D14 تنتمي إلى W2، وهكذا.

الآن، يمكننا المضي قدمًا لإنشاء عرض مُفهرس باستخدام الاستعلام الخاص بـ SQL أدناه.

MS SQL

 

بعد إنشاء هذا العرض المُفهرس، يمكننا استعلامه على النحو التالي:

MS SQL

 

الاستنتاج

سيكون لعرض المُفهرس وقت استعلام أسرع بشكل كبير من عرض أساسي أو استعلام الجدول مباشرة لمجموعات بيانات كبيرة حيث تكون البيانات قد وصلت إلى مليون صف أو أكثر. سيتمتع المستخدم النهائي بتجربة منخفضة التأخير، وسيتم تحسين استعلامات قاعدة البيانات. نظرًا لأننا قمنا بتجميع بيانات تغطي أسبوع في صف واحد، فقد قصرنا وقت التجميع إلى السابع.

Source:
https://dzone.com/articles/indexed-view-for-aggregating-metrics