متى يجب التجميع المسبق
قرّر بين التجميع المباشر والعروض المادية وOLAP اللاحق — استنادًا إلى حداثة البيانات والتكلفة
متى يجب التجميع المسبق درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
ثلاث استراتيجيات لاستعلامات التجميع
- مباشر — إعادة الحساب في كل مرة
- مادي — التخزين والتحديث دوريًا
- بالمشغلات/تزايدي — التحديث تدريجيًا عند كل تغيير
التجميع المباشر
بسيط ودائمًا محدث:
SELECT user_id, COUNT(*) FROM orders WHERE status = 'paid' GROUP BY user_id;متى يكون التجميع المباشر كافيًا
عندما يكون الاستعلام سريعًا بما يكفي، بفضل الفهارس الجيدة وصغر النتيجة وقلة مرات الاستدعاء. اجعلوا التنفيذ المباشر الخيار الافتراضي — ولا تحسّنوا الأداء إلا بعد قياس المشكلة.
التجميع المادي
للتقارير المكلفة التي تكون «حديثة بدرجة معقولة»:
CREATE MATERIALIZED VIEW user_revenue_30d AS
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY user_id;
-- Refresh nightly:
REFRESH MATERIALIZED VIEW CONCURRENTLY user_revenue_30d;التجميع بالمشغلات / التزايدي
للوحات المعلومات الفورية، حافظوا على جدول ملخّص باستخدام المشغلات:
CREATE TABLE user_summary (
user_id BIGINT PRIMARY KEY,
order_count INT NOT NULL DEFAULT 0,
revenue NUMERIC(12,2) NOT NULL DEFAULT 0
);
CREATE FUNCTION incr_summary() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO user_summary (user_id, order_count, revenue)
VALUES (NEW.user_id, 1, NEW.total)
ON CONFLICT (user_id) DO UPDATE
SET order_count = user_summary.order_count + 1,
revenue = user_summary.revenue + EXCLUDED.revenue;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_summary AFTER INSERT ON orders
FOR EACH ROW EXECUTE FUNCTION incr_summary();المقايضات
| الاستراتيجية | الحداثة | تكلفة الكتابة | تكلفة القراءة |
|---|---|---|---|
| مباشر | فورية | لا توجد | مرتفعة |
| مادي | متقادمة | دفعة تحديث | منخفضة |
| بالمشغلات | فورية | مع كل كتابة | منخفضة |
الاختيار حسب نسبة القراءة إلى الكتابة
- كتابات كثيرة وقراءات متقطعة → تنفيذ مباشر، أو عرض مادي يُحدَّث على دفعات
- قراءات كثيرة وكتابات متوسطة → عرض مادي
- قراءات وكتابات كثيرة مع أهمية الحداثة → ملخّص يعتمد على المشغلات
التجميع المسبق الخارجي
بالنسبة إلى التحليلات على نطاق مستودعات البيانات، ادفعوا عملية التجميع إلى:
- قواعد بيانات OLAP، مثل ClickHouse وDruid
- نماذج dbt في مستودع بيانات منفصل
- التجميعات المستمرة في TimescaleDB، وهو امتداد لـ Postgres
جداول الملخّص مقابل العرض المادي
تتيح لكم جداول الملخّص المخصصة إجراء تحديث تزايدي، بينما تفرض العروض المادية تحديثًا كاملًا. وازنوا بين جهد التطوير والبساطة التشغيلية.
تجنّبوا المشغلات على الجداول كثيرة الاستخدام
تضيف الملخّصات المعتمدة على المشغلات زمن استجابة للكتابة في كل عملية. وبالنسبة إلى الجداول عالية التواتر، مثل جداول الأحداث والمقاييس، يُفضّل استخدام تحديث دفعي للعرض المادي.
احذروا إبطال ذاكرة التخزين المؤقت
«هناك شيئان صعبان فقط في علوم الحاسوب.» الملخّصات المعتمدة على المشغلات هي ذاكرة تخزين مؤقت. وتظهر الأخطاء فيها على شكل أرقام غير صحيحة في لوحة المعلومات. أضيفوا مهمة تسوية يومية تعيد الحساب من المصدر.
تجسيد مسارات متعددة المراحل
اربطوا العروض المادية: يجمّع العرض في المرحلة الأولى الأحداث، ثم يجمّع العرض في المرحلة الثانية نتائج المرحلة الأولى. حدّثوها بالترتيب.
مراجعة
استخدموا التجميع المسبق عندما تكون تكلفة القراءات هي الغالبة.
- التنفيذ المباشر → الأبسط ودائمًا محدث
- العرض المادي → استعلام مكلف، ويُقبل التقادم
- الملخّص المعتمد على المشغلات → دائمًا محدث، لكنه يكلّف عمليات الكتابة
- اختاروا وفق نمط القراءة والكتابة لديكم
تحقق سريع
لديكم لوحة معلومات فورية يجب أن تعرض إيرادات المستخدمين حتى أحدث ثانية. ما الاستراتيجية الأنسب؟
الأسئلة الشائعة
هل درس «متى يجب التجميع المسبق» مجاني؟
نعم — نص درس «متى يجب التجميع المسبق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «متى يجب التجميع المسبق»؟
قرّر بين التجميع المباشر والعروض المادية وOLAP اللاحق — استنادًا إلى حداثة البيانات والتكلفة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «متى يجب التجميع المسبق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- العروض العادية: إعادة الاستخدام المنطقية
- العروض القابلة للتحديث ومشغلات INSTEAD OF
- العروض المادية واستراتيجيات REFRESH
- متى يجب التجميع المسبق