التقسيم بالنطاق والقائمة والتجزئة
اختر استراتيجية التقسيم المناسبة: النطاق للسلاسل الزمنية، والقائمة للمستأجرين، والتجزئة للتوزيع المتساوي
التقسيم بالنطاق والقائمة والتجزئة درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
التقسيم حسب النطاق
يغطي كل قسم نطاقًا متصلًا من القيم. ويُستخدم غالبًا مع السلاسل الزمنية:
CREATE TABLE events (
id BIGSERIAL,
ts TIMESTAMPTZ NOT NULL,
data JSONB
) PARTITION BY RANGE (ts);
CREATE TABLE events_2024_q1 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');حدود النطاق مفتوحة من الطرف
قيمة FROM مشمولة، وقيمة TO غير مشمولة. وتتوافق الحدود بوضوح، دون تداخل أو فجوات.
التقسيم حسب القائمة
يحتوي كل قسم على قيم محددة:
CREATE TABLE customers (
id BIGSERIAL,
country TEXT NOT NULL,
name TEXT
) PARTITION BY LIST (country);
CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;قسم DEFAULT
يستقبل الصفوف التي لا تطابق أي قسم آخر. ومن دونه، تفشل عمليات INSERT للصفوف غير المطابقة.
التقسيم حسب التجزئة
تُوزّع الصفوف عبر تجزئة مفتاح التقسيم. وهو مناسب عندما تريدون توزيعًا متساويًا ولا تملكون نطاقًا أو قائمة طبيعية:
CREATE TABLE sessions (
id UUID,
user_id BIGINT,
data JSONB
) PARTITION BY HASH (user_id);
CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);اختيار الاستراتيجية
- Range — للسلاسل الزمنية والمعرّفات المتزايدة رتيبًا
- List — للمستأجرين والبلدان والطبقات عالية النشاط
- Hash — عند عدم وجود انحراف طبيعي والرغبة في التوازي فقط
التقسيم الفرعي
يمكن تقسيم الأقسام نفسها إلى أقسام أخرى، أي استخدام تقسيم متعدد المستويات:
CREATE TABLE events_2024 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.الفهارس في الجداول المقسّمة
تنتقل الفهارس الموجودة على الجدول الأب تلقائيًا إلى جميع الأقسام. ويجب أن تتضمن قيود UNIQUE مفتاح التقسيم:
CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.
ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.المفاتيح الأساسية والأقسام
يجب أن يتضمن PRIMARY KEY للجدول المقسّم عمود التقسيم. وهذا قيد أساسي في التقسيم التصريحي.
إضافة الأقسام وحذفها
عمليات منخفضة التكلفة:
CREATE TABLE events_2024_q3 PARTITION OF events
FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');
DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.إنشاء الأقسام تلقائيًا
لا ينشئ Postgres الأقسام المستقبلية تلقائيًا. وتشمل الحلول الشائعة:
- امتداد pg_partman — لإدارة الأقسام الشهرية
- مهمة مجدولة تنشئ القسم التالي باستخدام CREATE
المفاتيح الخارجية
تحتاج المفاتيح الخارجية التي تشير إلى جدول مقسّم إلى PG 12 أو إصدار أحدث. أما المفاتيح الخارجية من جدول مقسّم إلى جدول عادي فتعمل كالمعتاد.
مراجعة
تغطي استراتيجيات التقسيم الثلاث معظم الحالات.
- Range للبيانات الزمنية أو التسلسلية
- List للمجموعات المنفصلة
- Hash للتوزيع المتساوي
- يجب أن يتضمن المفتاح الأساسي عمود التقسيم
تحقق سريع
تريد تقسيم جدول الجلسات حسب user_id مع توزيع متساوٍ ومن دون ترتيب طبيعي. ما الاستراتيجية المناسبة؟
الأسئلة الشائعة
هل درس «التقسيم بالنطاق والقائمة والتجزئة» مجاني؟
نعم — نص درس «التقسيم بالنطاق والقائمة والتجزئة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «التقسيم بالنطاق والقائمة والتجزئة»؟
اختر استراتيجية التقسيم المناسبة: النطاق للسلاسل الزمنية، والقائمة للمستأجرين، والتجزئة للتوزيع المتساوي تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «التقسيم بالنطاق والقائمة والتجزئة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا نستخدم التقسيم: التشذيب والصيانة
- التقسيم بالنطاق والقائمة والتجزئة
- فصل الأقسام وإرفاقها
- الاستعلام عبر الأقسام بكفاءة