إدارة قاعدة بيانات فعّالة أمر حيوي للتعامل مع مجموعات البيانات الكبيرة والحفاظ على أداء مثالي وسهولة الصيانة. تقسيم الجداول في PostgreSQL هو طريقة قوية لتقسيم جدول كبير بشكل منطقي إلى قطع صغيرة قابلة للإدارة تسمى الأقسام. تساعد هذه التقنية في تحسين أداء الاستعلامات، وتبسيط مهام الصيانة، وتقليل تكاليف التخزين.
يتناول هذا المقال بعمق إنشاء وإدارة تقسيم الجدول في PostgreSQL، مركزًا على امتداد pg_partman
لتقسيم الجدول استنادًا إلى الوقت والتسلسل. يتم مناقشة أنواع التقسيمات المدعومة في PostgreSQL بتفصيل، جنبًا إلى جنب مع حالات الاستخدام العملية وأمثلة عملية لتوضيح تنفيذها.
مقدمة
تولد التطبيقات الحديثة كميات هائلة من البيانات، مما يتطلب استراتيجيات فعّالة لإدارة قواعد البيانات للتعامل مع هذه الحجم. تقسيم الجداول هو تقنية يتم فيها تقسيم جدول كبير إلى أجزاء صغيرة مرتبطة منطقيًا. توفر PostgreSQL إطار عمل للتقسيم قوي لإدارة مجموعات البيانات بفعالية.
لماذا التقسيم؟
- تحسين أداء الاستعلامات. يمكن للاستعلامات تخطي الأقسام غير المتعلقة بسرعة باستخدام استبعاد القيد أو تقليم الاستعلام.
- تبسيط الصيانة. يمكن تنفيذ عمليات محددة للأقسام مثل التفريغ أو إعادة الفهرسة على مجموعات بيانات صغيرة.
- أرشفة فعّالة. يمكن حذف الأقسام القديمة أو أرشفتها دون التأثير على مجموعة البيانات النشطة.
- قابلية التوسع. يتيح التقسيم التوسع الأفقي، لا سيما في البيئات الموزعة.
التقسيم الأصلي مقابل التقسيم القائم على الإضافات
يبسط التقسيم التصريحي الأصلي في PostgreSQL العديد من جوانب التقسيم، بينما توفر الإضافات مثل pg_partman
قدرات إضافية من الأتمتة والإدارة، لا سيما لحالات الاستخدام الديناميكية.
التقسيم الأصلي مقابل pg_partman
Feature | Native Partitioning | pg_partman |
---|---|---|
الأتمتة | محدودة | شاملة |
أنواع التقسيم | النطاق، القائمة، التجزئة | الوقت، التسلسل (المتقدم) |
الصيانة | تتطلب نصوص يدوية | أوتوماتيكية |
سهولة الاستخدام | تتطلب خبرة في SQL | مبسطة |
أنواع تقسيم الجداول في PostgreSQL
يدعم PostgreSQL ثلاث استراتيجيات تقسيم أساسية: النطاق، القائمة، والتجزئة. لكل منها خصائص فريدة تناسب حالات استخدام مختلفة.
تقسيم النطاق
يقسم تقسيم النطاق الجدول إلى أقسام بناءً على نطاق من القيم في عمود محدد، غالبًا ما يكون عمود تاريخ أو عمود رقمي.
مثال: بيانات المبيعات الشهرية
CREATE TABLE sales (
sale_id SERIAL,
sale_date DATE NOT NULL,
amount NUMERIC
) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2023_01 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');
المزايا
- فعال لبيانات السلاسل الزمنية مثل السجلات أو المعاملات
- يدعم الاستعلامات المتسلسلة، مثل استرجاع البيانات لشهور محددة
العيوب
- يتطلب نطاقات محددة مسبقًا، مما قد يؤدي إلى تحديثات متكررة في النموذج
تقسيم القوائم
يقسم تقسيم البيانات استنادًا إلى مجموعة متفرقة من القيم، مثل المناطق أو الفئات.
مثال: طلبات إقليمية
CREATE TABLE orders (
order_id SERIAL,
region TEXT NOT NULL,
amount NUMERIC
) PARTITION BY LIST (region);
CREATE TABLE orders_us PARTITION OF orders FOR VALUES IN ('US');
CREATE TABLE orders_eu PARTITION OF orders FOR VALUES IN ('EU');
المزايا
- مثالي للمجموعات ذات عدد محدد من الفئات (مثل المناطق، الإدارات)
- سهل الإدارة لمجموعة ثابتة من الأقسام
العيوب
- غير مناسب للفئات الديناميكية أو المتنامية
تقسيم الهاش
يوزع تقسيم الهاش الصفوف عبر مجموعة من الأقسام باستخدام وظيفة هاش. وهذا يضمن توزيعًا متساويًا للبيانات.
مثال: حسابات المستخدمين
CREATE TABLE users (
user_id SERIAL,
username TEXT NOT NULL
) PARTITION BY HASH (user_id);
CREATE TABLE users_partition_0 PARTITION OF users
FOR VALUES WITH (MODULUS 4, REMAINDER 0);
المزايا
- يضمن توزيعًا متوازنًا عبر الأقسام، مما يمنع النقاط الساخنة
- مناسب لأعباء عمل منتشرة بالتساوي
العيوب
- غير قابل للقراءة بواسطة الإنسان؛ لا يمكن تحديد الأقسام بشكل بديهي
دليل شامل على pg_partman
pg_partman
هو تمديد PostgreSQL يبسط إدارة التقسيم، خاصة للبيانات المعتمدة على الوقت والسريال.
التثبيت والإعداد
pg_partman
يتطلب التثبيت كتمديد في PostgreSQL. يوفر مجموعة من الوظائف لإنشاء وإدارة الجداول المقسمة ديناميكيًا.
- قم بالتثبيت باستخدام مدير الحزم الخاص بك:
Shell
sudo apt-get install postgresql-pg-partman
- قم بإنشاء الامتداد في قاعدة البيانات الخاصة بك:
SQL
إنشاء امتداد pg_partman;
تكوين تقسيم القسمة
pg_partman
يدعم التقسيم القائم على الوقت والتسلسل، وهما مفيدان بشكل خاص لمجموعات البيانات التي تحتوي على بيانات زمنية أو معرفات متسلسلة.
مثال على التقسيم القائم على الوقت
CREATE TABLE logs (
id SERIAL,
log_time TIMESTAMP NOT NULL,
message TEXT
);
SELECT partman.create_parent(
p_parent_table := 'public.logs',
p_control := 'log_time',
p_type := 'time',
p_interval := 'daily'
);
هذا التكوين:
- ينشئ تقسيمات يومية تلقائيًا
- يبسط استعلامات وصيانة بيانات السجلات
مثال على التقسيم القائم على التسلسل
CREATE TABLE transactions (
transaction_id BIGSERIAL PRIMARY KEY,
details TEXT NOT NULL
);
SELECT partman.create_parent(
p_parent_table := 'public.transactions',
p_control := 'transaction_id',
p_type := 'serial',
p_interval := 100000
);
ينشئ تقسيمات كل 100,000 صف، مضمنًا أن تظل الجدول الأساسي قابلة للإدارة.
ميزات الأتمتة
صيانة تلقائية
استخدم run_maintenance()
لضمان إنشاء تقسيمات مستقبلية مسبقًا:
SELECT partman.run_maintenance();
سياسات الاحتفاظ
حدد فترات الاحتفاظ لإسقاط التقسيمات القديمة تلقائيًا:
UPDATE partman.part_config
SET retention = '12 months'
WHERE parent_table = 'public.logs';
مزايا pg_partman
- يبسط إنشاء التقسيم الديناميكي
- يأتمت عمليات التنظيف والصيانة
- يقلل من الحاجة إلى تحديثات مخطط يدوية
حالات استخدام عملية لتقسيم الجداول
- إدارة السجلات. تقسيم السجلات عالية التردد حسب اليوم لسهولة التأريش والاستعلام.
- بيانات متعددة المناطق. أنظمة التجارة الإلكترونية تقسم الطلبات حسب المنطقة لتعزيز قابلية التوسع.
- بيانات السلاسل الزمنية. تطبيقات الإنترنت من أشياء الإنترنت مع بيانات تليمتري مقسمة.
إدارة السجلات
قسم السجلات حسب اليوم أو الشهر لإدارة البيانات ذات التردد العالي بكفاءة.
SELECT partman.create_parent(
p_parent_table := 'public.server_logs',
p_control := 'timestamp',
p_type := 'time',
p_interval := 'monthly'
);
بيانات متعددة المناطق
قسم بيانات المبيعات أو المخزون حسب المنطقة لتحسين القدرة على التوسع.
CREATE TABLE sales (
sale_id SERIAL,
region TEXT NOT NULL
) PARTITION BY LIST (region);
المعاملات عالية الحجم
قسم المعاملات حسب ID
التسلسلي لتجنب الفهارس الضخمة.
SELECT partman.create_parent(
p_parent_table := 'public.transactions',
p_control := 'transaction_id',
p_type := 'serial',
p_interval := 10000
);
الخاتمة
يعد تقسيم الجداول تقنية لا غنى عنها لإدارة مجموعات البيانات الكبيرة. تجعل الميزات المدمجة في PostgreSQL، جنبًا إلى جنب مع امتداد pg_partman
، تنفيذ استراتيجيات التقسيم الديناميكية والمُؤتمتة أسهل. تتيح هذه الأدوات لمشرفي قواعد البيانات تحسين الأداء، وتبسيط الصيانة، والتوسع بفعالية.
يعتبر التقسيم حجر الزاوية في إدارة قواعد البيانات الحديثة، خاصة في التطبيقات ذات الحجم الكبير. يضمن فهم وتطبيق هذه المفاهيم أنظمة قواعد بيانات قوية وقابلة للتوسع.
Source:
https://dzone.com/articles/postgresql-partitioning-pg-partman-data-management