DATA · PARTITIONING · 2026
تقسيم البيانات (Partitioning)
إزاي تدير جداول ضخمة بمليارات الـ rows بدون ما الـ queries تبطل تشتغل؟
0%
Section 00
يعني إيه Partitioning؟
البداية من الصفر
الفكرة الكبيرة
جدول واحد ضخم = بطيء. عدة partitions صغيرة = سريع
BEFORE · بدون partitioning
جدول واحد ضخم
orders table: ├── 500,000,000 rows ├── 200 GB └── indexes: 50 GB SELECT * FROM orders WHERE created_at >= '2026-01-01'; --> يمر على كل الـ rows --> بطيء جداً
- ✗ الـ indexes ضخمة، بتاكل RAM
- ✗ الـ queries بطيئة حتى مع indexes
- ✗ VACUUM وbackup بياخدوا ساعات
- ✗ حذف بيانات قديمة = كارثة
AFTER · مع partitioning
عدة partitions
orders (partitioned by year): ├── orders_2024 (100M rows, 40GB) ├── orders_2025 (200M rows, 80GB) └── orders_2026 (200M rows, 80GB) SELECT * FROM orders WHERE created_at >= '2026-01-01'; --> يمر على orders_2026 فقط --> أسرع 3x على الأقل
- ✓ الـ indexes أصغر وأسرع
- ✓ Partition Pruning = سرعة تلقائية
- ✓ حذف partition = عملية فورية
- ✓ VACUUM على partitions منفصلة
١. الأداء
الـ queries بتشتغل على partition واحدة بدل الجدول كله
٢. الإدارة
Backup و maintenance على partitions أصغر = أسهل
٣. الأرشفة
DROP partition قديمة بدل DELETE بطيء
الـ Partitioning هو تقسيم جدول ضخم لأجزاء أصغر (partitions) داخل نفس قاعدة البيانات. كل partition بتتخزن كملف منفصل على الـ disk، بس الـ application بيشوفها كأنها جدول واحد.
📖 مثال بسيط
جدول orders فيه 500 مليون row لسنين متعددة. بدل ما يكون ملف واحد ضخم، نقسمه لأجزاء بالسنة:
orders (parent - افتراضي)
├── orders_2023 (150M rows)
├── orders_2024 (150M rows)
├── orders_2025 (150M rows)
└── orders_2026 (50M rows so far)
├── orders_2023 (150M rows)
├── orders_2024 (150M rows)
├── orders_2025 (150M rows)
└── orders_2026 (50M rows so far)
الـ application بيعمل SELECT * FROM orders عادي. الـ DB بتدير الـ routing تلقائياً.
مصطلحات مهمة
- parent table: الجدول "الوهمي" اللي بيوحّد كل الـ partitions
- partition: جدول فرعي فيه جزء من البيانات
- partition key: العمود اللي بتقسم على أساسه (زي created_at)
- partition pruning: الـ DB بتتجاهل الـ partitions اللي مش محتاجتها في الـ query
⚡ نقطة مهمة
الـ partitioning مش نفس الـ sharding. الـ partitioning داخل DB واحدة (نفس السيرفر). الـ sharding بيقسم على DBs مختلفة (سيرفرات مختلفة). هنشوف الفرق بالتفصيل بعدين.
أسئلة انترفيو على القسم ده
3القسم 1 / 13