OLTP مقابل OLAP
قواعد البيانات المعاملاتية مقابل التحليلية
OLTP مقابل OLAP درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
ما المقصود بـ OLTP وOLAP؟
قواعد البيانات ليست حلًا واحدًا يناسب الجميع. فقد شكّل نوعان مختلفان جذريًا من أحمال العمل طريقة تصميم قواعد البيانات وتشغيلها: OLTP (معالجة المعاملات عبر الإنترنت) وOLAP (المعالجة التحليلية عبر الإنترنت).
يُعد فهم الفرق بينهما ضروريًا لكل متخصص في البيانات. ويحدد الاختيار الصحيح بين OLTP وOLAP سرعة الاستعلام، وتكلفة التخزين، والبنية العامة لنظام البيانات.
OLTP: مصمم للمعاملات
تتعامل أنظمة OLTP مع عدد كبير من العمليات القصيرة والسريعة، مثل الإدراج والتحديث والحذف التي تعكس أحداث الأعمال في الوقت الفعلي. ومن أمثلتها إنشاء طلب، أو معالجة دفعة، أو تحديث سجل عميل.
تتمثل الخصائص الأساسية لـ OLTP في انخفاض زمن الاستجابة لكل عملية، والتزامن العالي، والاتساق القوي. ويجب أن تلتزم كل معاملة بخصائص ACID لحماية سلامة البيانات.
-- OLTP example: inserting a new order
INSERT INTO orders (customer_id, product_id, quantity, order_date)
VALUES (1042, 88, 3, CURRENT_DATE);
-- Immediately update inventory
UPDATE inventory
SET stock = stock - 3
WHERE product_id = 88;OLAP: مصمم للتحليل
تُحسّن أنظمة OLAP لتنفيذ الاستعلامات المعقدة التي تفحص كميات كبيرة من البيانات التاريخية لاكتشاف الاتجاهات والأنماط والملخصات. ويستخدم محللو الأعمال وعلماء البيانات OLAP للإجابة عن أسئلة مثل: «ما إجمالي مبيعاتنا حسب المنطقة في الربع السابق؟»
غالبًا ما تجمع استعلامات OLAP ملايين الصفوف، وتتضمن عمليات ربط متعددة عبر جداول الحقائق والأبعاد. وتأتي سرعة عمليات الكتابة الفردية في مرتبة ثانوية؛ أما معدل نقل القراءة ومرونة الاستعلامات فهما الأهم.
-- OLAP example: total sales by region for Q1 2024
SELECT
d.region,
SUM(f.sales_amount) AS total_sales,
COUNT(f.order_id) AS order_count
FROM fact_sales f
JOIN dim_date dd ON f.date_key = dd.date_key
JOIN dim_store d ON f.store_key = d.store_key
WHERE dd.year = 2024
AND dd.quarter = 1
GROUP BY d.region
ORDER BY total_sales DESC;مقارنة النظامين جنبًا إلى جنب
أسهل طريقة لتذكر الفرق هي التفكير في الجهة التي تستخدم كل نظام وكيف تستخدمه:
- OLTP: تستخدمه الواجهات الخلفية للتطبيقات؛ آلاف المستخدمين المتزامنين؛ وكل استعلام يتعامل مع بضعة صفوف.
- OLAP: يستخدمه المحللون وأدوات إعداد التقارير؛ عدد أقل من الاستعلامات المتزامنة، لكن كل استعلام يفحص ملايين الصفوف.
وتؤدي أنماط الوصول المتباينة هذه إلى اختلاف كبير في تصميمات المخططات، واستراتيجيات الفهرسة، وحتى اختيارات الأجهزة.
-- OLTP: lookup a single customer's latest order (row-level access)
SELECT o.order_id, o.order_date, o.total_amount
FROM orders o
WHERE o.customer_id = 1042
ORDER BY o.order_date DESC
LIMIT 1;
-- OLAP: monthly revenue trend over the past year (aggregate scan)
SELECT
DATE_TRUNC('month', order_date) AS month,
SUM(total_amount) AS revenue
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;تصميم المخطط: مُطبَّع مقابل غير مُطبَّع
تفضّل قواعد بيانات OLTP المخططات المُطبَّعة (3NF أو أعلى) للقضاء على التكرار وجعل عمليات الكتابة فعّالة. يوجد كل كيان في جدوله الخاص، مما يقلّل البيانات التي يتم الوصول إليها في كل معاملة.
تفضّل قواعد بيانات OLAP المخططات غير المُطبَّعة — ولا سيما مخططات النجمة ومخططات الثلج — حيث تكون البيانات مرتبطة مسبقاً ومتكررة. هذا يلغي عمليات الربط المكلفة وقت الاستعلام، ويسمح لمحركات التخزين العمودي بفحص البيانات بسرعة أكبر.
-- Normalized OLTP design (3NF)
CREATE TABLE customers (
customer_id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(150) UNIQUE
);
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(customer_id),
order_date DATE,
total NUMERIC(10,2)
);
-- Denormalized OLAP fact table (star schema)
CREATE TABLE fact_sales (
sale_id BIGINT PRIMARY KEY,
customer_key INT,
date_key INT,
product_key INT,
region VARCHAR(50),
category VARCHAR(50),
amount NUMERIC(12,2)
);اختلاف استراتيجيات الفهرسة
تعتمد أنظمة OLTP اعتماداً كبيراً على فهارس B-tree في المفاتيح الأساسية والمفاتيح الخارجية، لتمكين عمليات البحث السريعة عن صف واحد وعمليات الربط الفعّالة داخل المعاملة.
تستفيد أنظمة OLAP من فهارس bitmap والتخزين العمودي والتقسيم. ويكون فحص عمود كامل، مثل جميع مبالغ المبيعات، أكثر كفاءة بكثير عندما تُخزَّن البيانات عموداً بعمود بدلاً من صفاً بصف.
-- OLTP: B-tree index for fast order lookup by customer
CREATE INDEX idx_orders_customer
ON orders (customer_id);
-- OLTP: compound index for range queries
CREATE INDEX idx_orders_date_customer
ON orders (order_date, customer_id);
-- OLAP: partition fact table by year to prune scan
CREATE TABLE fact_sales_2024
PARTITION OF fact_sales
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');التزامن والقفل
يجب أن تتعامل أنظمة OLTP مع آلاف عمليات الكتابة المتزامنة من دون تعارضات. وتستخدم قواعد البيانات القفل على مستوى الصف وMVCC (التحكم في التزامن متعدد الإصدارات)، بحيث لا تمنع عمليات القراءة عمليات الكتابة ولا العكس.
تكون استعلامات OLAP للقراءة فقط في الغالب. ونادراً ما يمثل القفل مشكلة، لكن عمليات الفحص طويلة المدة قد تستهلك قدراً كبيراً من CPU وI/O. وتشغّل معظم مستودعات البيانات عمليات OLAP على نظام منفصل تُملأ بياناته بواسطة ETL دفعي أو CDC (التقاط تغيّر البيانات) من مصدر OLTP.
-- OLTP: explicit transaction with row-level lock
BEGIN;
SELECT balance
FROM accounts
WHERE account_id = 7
FOR UPDATE;
UPDATE accounts
SET balance = balance - 200
WHERE account_id = 7;
COMMIT;ETL: الربط بين OLTP وOLAP
نظراً إلى عدم توافق تصميمَي OLTP وOLAP، تشغّل المؤسسات خطوط أنابيب ETL (الاستخراج والتحويل والتحميل) لنسخ البيانات وإعادة تشكيلها من قاعدة البيانات الخاصة بالمعاملات إلى المستودع التحليلي وفق جدول زمني محدد (ليلياً أو كل ساعة أو شبه فوري).
تحوّل عملية ETL صفوف OLTP المُطبَّعة إلى سجلات حقائق وأبعاد غير مُطبَّعة، وتطبّق منطق الأعمال أثناء ذلك، مثل تحويل العملات وتقسيم العملاء إلى شرائح.
-- Simplified ETL INSERT from OLTP orders into OLAP fact table
INSERT INTO fact_sales (
customer_key,
date_key,
product_key,
amount
)
SELECT
dc.customer_key,
dd.date_key,
dp.product_key,
o.total_amount
FROM orders o
JOIN dim_customer dc ON dc.source_customer_id = o.customer_id
JOIN dim_date dd ON dd.calendar_date = o.order_date
JOIN dim_product dp ON dp.source_product_id = o.product_id
WHERE o.order_date = CURRENT_DATE - INTERVAL '1 day'
AND o.order_id NOT IN (SELECT source_order_id FROM fact_sales);أنماط استعلامات OLAP المعتادة
تتضمن استعلامات OLAP دائماً تقريباً التجميعات (SUM وCOUNT وAVG)، والتجميع عبر أبعاد متعددة، والتصفية وفق نطاقات زمنية أو فئات. وهذه هي اللبنات الأساسية للوحات المعلومات وتقارير الأعمال.
تتميّز دوال النوافذ بقوة خاصة في أحمال OLAP — إذ تتيح لكم مقارنة أرقام كل فترة بأرقام الفترة السابقة من دون استخدام ربط ذاتي.
-- Year-over-year revenue comparison using a window function
SELECT
dd.year,
dd.quarter,
SUM(f.amount) AS revenue,
LAG(SUM(f.amount)) OVER (PARTITION BY dd.quarter
ORDER BY dd.year) AS prev_year_revenue,
ROUND(
100.0 * (SUM(f.amount) -
LAG(SUM(f.amount)) OVER (PARTITION BY dd.quarter
ORDER BY dd.year))
/ NULLIF(LAG(SUM(f.amount)) OVER (PARTITION BY dd.quarter
ORDER BY dd.year), 0)
, 2) AS yoy_pct_change
FROM fact_sales f
JOIN dim_date dd ON f.date_key = dd.date_key
GROUP BY dd.year, dd.quarter
ORDER BY dd.quarter, dd.year;HTAP: طمس الحدود
تطبّق الأنظمة الحديثة مثل TiDB وSingleStore وPostgreSQL + الامتدادات العمودية أسلوب HTAP (المعالجة الهجينة للمعاملات والتحليلات). وتهدف هذه الأنظمة إلى التعامل مع كلا النوعين من الأحمال في محرّك واحد، لتجنّب التعقيد التشغيلي الناتج عن صيانة نظامَي OLTP وOLAP منفصلين.
يحقق HTAP ذلك من خلال تخزين البيانات بتنسيقين في الوقت نفسه: مخزن صفوف لعمليات الكتابة الخاصة بالمعاملات، ومخزن أعمدة لعمليات القراءة التحليلية، مع إبقائهما متزامنين تلقائياً.
-- PostgreSQL with cstore_fdw (columnar extension) example
-- Analytical table stored in columnar format
CREATE FOREIGN TABLE fact_sales_columnar (
date_key INT,
product_key INT,
region VARCHAR(50),
amount NUMERIC(12,2)
)
SERVER cstore_server
OPTIONS (filename '/data/fact_sales_columnar');
-- Regular OLTP table remains row-based
-- Both can be queried in the same SQL statement
SELECT f.region, SUM(f.amount)
FROM fact_sales_columnar f
GROUP BY f.region;اختيار النظام المناسب
يعتمد الاختيار بين OLTP وOLAP (أو HTAP) على نوع الحمل الأساسي لديكم:
- إذا كنتم تبنون تطبيقاً يسجّل الأحداث في الوقت الفعلي — فاستخدموا قاعدة بيانات OLTP (PostgreSQL أو MySQL أو SQL Server).
- إذا كنتم تبنون طبقة تقارير فوق بيانات تاريخية — فاستخدموا مستودع OLAP (BigQuery أو Redshift أو Snowflake أو ClickHouse).
- إذا كنتم تحتاجون إلى كليهما وتريدون تبسيط التشغيل — فقيّموا خيارات HTAP.
تستخدم كثير من البنى الإنتاجية النظامين معاً: قاعدة بيانات OLTP بوصفها النظام المرجعي، ومستودع بيانات منفصلاً للتحليلات، ويربط بينهما خط أنابيب ETL.
-- Quick diagnostic: check table access pattern
-- High seq_scan relative to idx_scan = analytical (OLAP-like) load
SELECT
relname AS table_name,
seq_scan,
idx_scan,
n_live_tup AS live_rows
FROM pg_stat_user_tables
ORDER BY seq_scan DESC
LIMIT 10;اختبار المعرفة
اختبروا فهمكم للفروق الرئيسية بين نظامَي OLTP وOLAP.
مراجعة الدرس
أهم النقاط حول OLTP وOLAP:
- يتعامل OLTP مع أحمال المعاملات في الوقت الفعلي: عمليات كتابة سريعة ومتزامنة على مستوى الصف مع ضمانات ACID.
- يتعامل OLAP مع الأحمال التحليلية: تجميعات معقدة على مجموعات بيانات تاريخية كبيرة باستخدام مخططات غير مُطبَّعة.
- يتبع تصميم المخطط نوع الحمل — فالتطبيع (3NF) مناسب لـ OLTP، بينما تناسب مخططات النجمة أو الثلج OLAP.
- تربط خطوط أنابيب ETL بين النظامين، إذ تحمّل بيانات OLTP المحوّلة إلى المستودع التحليلي.
- تحاول أنظمة HTAP خدمة كلا النوعين من الأحمال عبر محرّك واحد باستخدام تخزين مزدوج للصفوف والأعمدة.
يمنع اختيار البنية المناسبة منذ البداية عمليات الترحيل الشاقة لاحقاً، ويضمن تنفيذ استعلاماتكم بالسرعة التي يتوقعها المستخدمون.
تعلم SQL مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 46
- الدروس
- 183
الأسئلة الشائعة
هل درس «OLTP مقابل OLAP» مجاني؟
نعم — نص درس «OLTP مقابل OLAP» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «OLTP مقابل OLAP»؟
قواعد البيانات المعاملاتية مقابل التحليلية تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «OLTP مقابل OLAP»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.