المقدمة
في عالم قواعد البيانات، دايمًا المشكلة بتكون في كيفية تحسين الـ Performance بتاعة الـ Queries اللي شغالين عليها وفيه أكتر من طريقة لتحسين الأداء وتسهيل الوصول للبيانات وكنا اتكلمنا عن بعضهم قبل كده.
واحدة من الطرق دي هي Views. فالـ View هو عبارة عن Query بتجيب البيانات من جدول أو أكتر وتقدمهالك كأنها جدول مستقل تماماً. يعني مثلاً، لو عندك جدول فيه الكتب وجدول تاني فيه المؤلفين، ممكن تعمل View يعرض لك البيانات المهمة من الجدولين دول مع بعض ويكون فيه بس الـ Columns اللي مجتاجها.
الـ View العادية ممتازة لما يكون عندك بيانات بتتغير بشكل مستمر، لأنها دايمًا بتجيب البيانات الأحدث. لكن المشكلة بتظهر امتة ؟ المشكلة بتظهر لو عندنا كمية كبيرة وضخمة من البيانات أو الـ Query معقدة شويتين فبالتالي هيبقى فيه بطء شديد في الأداء ككل. وهنا بيجي دور الـ Materialized Views كحل سحري يقدر يوفرلنا الأداء المطلوب.
Materialized View
الـ Materialized View مش مجرد Query بتتنفذ كل مرة زي الـ Views العادية. ولكن هي بتنفذ الـ Query مرة واحدة بس وتخزن النتيجة فعليًا في جدول جديد جوا الـ Database.
فالميزة الكبيرة هنا إننا لما نطلب البيانات دي تاني، مش هنحتاج الـ Query تتنفذ من الأول، وبالتالي السرعة بتبقى أفضل بكتير جدًا.
فلو بنتعامل مع قواعد بيانات كبيرة أو Queries معقدة شوية، وكان عندنا Query على سبيل المثال محتاجة بيانات من أكتر من جدول وبتنفذ عمليات حسابية معقدة، في الحالة دي كل مرة بنطلب فيها البيانات دي السيرفر هيستهلك وقت ومجهود كبير. ولكن مع الـ Materialized View، احنا بنخزن النتيجة مرة واحدة وبعد كده أي Query بتيجي للبيانات بيكون أسرع بكتير لاننا بس بنقرأ الجدول اكنه جدول جديد موجود في الـ Database.
طب الكلام ده جميل جدًا لحد كده ، ولكن احنا ناسيين نقطة مهمة .. ايه اللي هيحصل في الجدول ده لو الجداول القديمة فيها قيم اتغيرت أو بيانات اتحذفت أو بيانات جديدة انضافت ؟
على عكس الـ View الطبيعي اللي بيتغير لما البيانات الأصلية تتغير لانه بيعيد تنفيذ الـ Query من أول وجديد، الـ Materialized View مش هيتحدث تلقائيًا لوحده. وعشان كده، لازم نعمل تحديث للـ Materialized View بشكل دوري عشان نضمن إن البيانات اللي فيه دايمًا حديثة.
فيه طرق مختلفة للتحديث، أشهرها:
- الـ Complete Refresh: وفي الطريقة دي كل اللي بنعمله اننا بنمسح البيانات المخزنة القديمة ونرجع بكل بساطة ننفذ الـ Query من أول وجديد عشان نجيب البيانات الحديثة كلها. فدي بتبقى مفيدة جدًا لو التغييرات على البيانات الأصلية بتبقى كبيرة.
- الـ Incremental Refresh: وفي الطريقة دي كل اللي بنعمله اننا بنحدث بس البيانات اللي اتغيرت من آخر مرة عملنا فيها تحديث للـ Materialized View. يعني لو اتضافت أو اتعدلت بيانات جديدة، التحديث ده بس اللي هيضيفها أو يعدلها بس من غير ما يمسح أي بيانات القديمة.
تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀
النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉
بفضل الله قمنا بإطلاق قناة اقرأ-تِك على التليجرام مجانًا للجميع 🚀
آملين بده اننا نفتح باب تاني لتحقيق رؤيتنا نحو إثراء المحتوى التقني باللغة العربية ، ومساعدة لكل متابعينا في انهم يوصلوا لجميع أخبار اقرأ-تِك من حيث المقالات ومحتوى ورقة وقلم والنشرة الأسبوعية وكل جديد بطريقة سريعة وسهلة
مستنينكوا تنورونا , وده رابط القناة 👇
إمتى نستخدم الـ Materialized Views؟
الـ Materialized Views بتكون مفيدة في سيناريوهات متعددة زي: