Partitioning — bitta mantiqiy table yoki index ma’lumotini kichikroq fizik bo‘laklarga ajratish usuli. Foydalanuvchi table’ni bitta obyekt sifatida query qiladi, database esa kerakli partitionlarni tanlaydi.
Partitioning katta table’larni boshqarish, query scanini kamaytirish, retention va maintenance jarayonlarini soddalashtirish uchun ishlatiladi.
Shardingdan farqli ravishda partitionlar ko‘pincha bitta database tizimi tomonidan umumiy boshqariladi.
Partition key
Row qaysi partitionga tushishini partition key belgilaydi.
Misollar:
- sana;
- region;
- tenant;
- ID;
- status.
Yaxshi key query filterlari va data lifecycle bilan mos bo‘ladi.
Range partitioning
Qiymat oralig‘i bo‘yicha bo‘linadi.
Masalan, oylar bo‘yicha:
2026-01
2026-02
2026-03
Vaqtga bog‘liq log, event va transaction table’lari uchun qulay.
Eski oyni alohida drop yoki archive qilish mumkin.
List partitioning
Aniq qiymatlar ro‘yxati partitionga biriktiriladi.
Masalan:
UZ, KZ → CentralAsia
DE, FR → Europe
Region, category yoki status bo‘yicha bo‘lish uchun ishlatiladi.
Yangi qiymat uchun default partition yoki DDL talab qilinishi mumkin.
Hash partitioning
Key hash natijasiga ko‘ra partition tanlanadi.
Bu data’ni tengroq taqsimlashga yordam beradi.
Range query barcha partitionlarni ko‘rishi mumkin.
Hash partitioning vaqt bo‘yicha retentionni soddalashtirmaydi.
Composite partitioning
Bir nechta bosqich birlashtiriladi.
Masalan:
avval oy bo‘yicha range
keyin tenant bo‘yicha hash
Bu katta vaqtli multi-tenant table’da query va parallelizmni yaxshilashi mumkin.
Murakkab partition soni metadata va maintenance yukini oshiradi.
Partition pruning
Query predicate’iga qarab database keraksiz partitionlarni o‘qimaydi.
Misol:
SELECT *
FROM events
WHERE created_at >= '2026-07-01'
AND created_at < '2026-08-01';
Faqat iyul partitioni scan qilinishi mumkin.
Bu partition pruning.
Predicate partition key bilan tushunarli shaklda yozilishi kerak.
Static va runtime pruning
Optimizer query plan tuzishda aniq constant orqali partitionlarni oldindan tanlashi mumkin.
Prepared parameter yoki join natijasiga bog‘liq holatda runtime pruning bajarilishi mumkin.
Function yoki type conversion pruningni cheklashi ehtimoli bor.
Local index
Har partition o‘z indexiga ega bo‘lishi mumkin.
Afzalliklari:
- kichik index;
- partition maintenance;
- tez rebuild;
- alohida storage.
Global uniquenessni faqat local index bilan ta’minlash qiyin bo‘lishi mumkin.
Global index
Barcha partitionlarni qamrab oladigan index global index hisoblanadi.
U global lookup va unique constraint uchun qulay.
Kamchiligi — partition detach, move va maintenance murakkablashadi.
Aniq qo‘llab-quvvatlash database mahsulotiga bog‘liq.
Partition elimination va performance
Partitioning har query’ni avtomatik tezlashtirmaydi.
Agar query partition key bo‘yicha filter qilmasa, barcha partition scan qilinadi.
Juda ko‘p partition query planning vaqtini va metadata overheadini oshirishi mumkin.
Kerakli indexlar baribir talab qilinadi.
Retention
Vaqtga bo‘lingan table’da eski data’ni row-by-row delete qilish o‘rniga butun partition drop qilinadi.
Bu:
- tez;
- kam WAL;
- kam lock;
- kam bloat
bo‘lishi mumkin.
Dropdan oldin backup va compliance retention tekshiriladi.
Partition attach va detach
Tayyor table partition sifatida attach qilinishi mumkin.
Bu bulk load jarayonida:
- data alohida table’ga yuklash;
- validation;
- index;
- partition sifatida ulash
imkonini beradi.
Detach data’ni asosiy table’dan mantiqiy ajratadi.
Default partition
Hech bir aniq partition shartiga mos kelmagan row default partitionga tushadi.
Bu insert failure’ni kamaytiradi.
Biroq default partition yashirin data quality muammosini to‘plashi mumkin.
U muntazam tekshiriladi.
Partition constraint
Har partition faqat o‘z key oralig‘idagi rowlarni saqlashi kerak.
Database bu qoidani constraint orqali biladi.
Noto‘g‘ri row attach jarayonida rad etiladi yoki oldindan validation talab qilinadi.
Unique constraint
Partitioned table’da unique constraint ko‘pincha partition keyni ham o‘z ichiga olishi kerak.
Masalan, faqat email global unique bo‘lishi kerak, ammo partition created_at bo‘yicha bo‘lsa cheklov murakkablashadi.
Global index yoki alohida registry kerak bo‘lishi mumkin.
Foreign key
Partitioned table’ga yoki undan foreign key qo‘llab-quvvatlashi database versiyasiga bog‘liq.
Cascade operation ko‘p partitionga ta’sir qilishi mumkin.
Query plan va locklar katta datasetda sinovdan o‘tkaziladi.
Parallelism
Turli partitionlar parallel scan yoki maintenance qilinishi mumkin.
Bu analytical query va bulk operationni tezlashtiradi.
Lekin barcha worker bir disk yoki networkni bo‘lishsa parallelizmning foydasi cheklanadi.
Partitioning va sharding
Partitioning odatda bitta database ichida mantiqiy table’ni bo‘ladi.
Sharding esa data’ni mustaqil server yoki database’lar orasida taqsimlaydi.
Ayrim distributed database bu ikki atamani bir-biriga yaqin ishlatishi mumkin.
Kontekst va ownership muhim.
Monitoring
Kuzatiladi:
- partition hajmi;
- row soni;
- pruning;
- default partition;
- yangi partition mavjudligi;
- index holati;
- eski partition retentioni;
- planning time.
Kelajak sana uchun partition yaratilmasa insertlar xato berishi mumkin.
Partition rotation
Vaqtli table’da kelajak partitionlari oldindan yaratiladi.
Schedule yangi partitionni yaratadi, eski partitionni archive qiladi va retention muddati tugagach drop qiladi.
Bu jarayon ishlamay qolsa default partition o‘sishi yoki insertlar xato berishi mumkin.
Partitionwise operation
Ayrim optimizerlar join va aggregationni partitionlar bo‘yicha alohida bajarib, natijalarni birlashtirishi mumkin.
Bu ikki table bir xil key va boundarylar bilan partition qilinganida samarali.
Mos kelmaydigan partition sxemasi data movement yoki umumiy joinni talab qiladi.
Bog‘liq tushunchalar
Table partitioning, Partition key, Range partitioning, List partitioning, Hash partitioning, Partition pruning, Local index, Retention, Sharding