افراز (پایگاه داده)

**افراز** یا **پارتیشن** به تقسیم یک پایگاه داده منطقی یا اجزای تشکیل‌دهنده آن، به بخش‌های مستقل و مجزا گفته می‌شود. پارتیشن‌بندی پایگاه داده به فرایند شکستن آگاهانه یک پایگاه داده بزرگ به پایگاه داده‌های کوچک‌تر با هدف مقیاس‌پذیری اشاره دارد. در یک پایگاه داده افراز شده، هر قطعه داده دقیقاً به یک پارتیشن تعلق دارد و عملاً هر پارتیشن به‌عنوان یک پایگاه داده کوچک مستقل عمل می‌کند. پارتیشن‌بندی پایگاه داده معمولاً به دلایلی مثل مدیریت‌پذیری، کارایی یا دسترس‌پذیری، یا متعادل‌سازی بار انجام می‌شود. این روش در سامانه‌های مدیریت پایگاه داده توزیع‌شده بسیار رایج است؛ که در آنها هر پارتیشن می‌تواند روی چندین گره توزیع شود و کاربران در هر گره، تراکنش‌های محلی را روی پارتیشن مربوطه انجام دهند. این کار باعث افزایش کارایی برای سامانه‌هایی می‌شود که تراکنش‌های منظم بر روی نماهای مشخصی از داده دارند، در حالی که دسترس‌پذیری و امنیت نیز حفظ می‌شود.

پارتیشن‌بندی امکان توزیع مجموعه‌داده‌ها روی چندین دیسک و توزیع بار پرس‌وجوها روی چندین پردازنده را فراهم می‌کند. برای پرس‌وجوهایی که تنها روی یک پارتیشن عمل می‌کنند، هر گره به طور مستقل پرس‌وجوها را روی پارتیشن محلی خود اجرا می‌کند و این امر باعث می‌شود توان عملیاتی پرس‌وجوها با افزودن گره‌های بیشتر، به صورت خطی مقیاس‌پذیر شود. پرس‌وجوهای پیچیده‌تر می‌توانند به صورت موازی روی چندین گره اجرا شوند، هرچند این موضوع چالش‌های اضافی به همراه دارد.

## تاریخچه
پارتیشن‌بندی پایگاه داده در دهه ۱۹۸۰ و با سامانه‌هایی مانند ترادیتا و نان‌استاپ اس‌کیوال پدیدار شد. این رویکرد بعدها توسط پایگاه داده‌های نواس‌کیوال و انبارهای داده مبتنی بر آپاچی هدوپ نیز پذیرفته شد. اگرچه پیاده‌سازی‌ها میان بارهای کاری تراکنشی و تحلیلی متفاوت هستند، اصول بنیادین پارتیشن‌بندی در هر دو مورد ثابت باقی مانده‌اند.

## اصطلاح‌شناسی
پایگاه داده‌های مختلف از اصطلاحات متفاوتی برای پارتیشن‌بندی استفاده می‌کنند:

* **شارد** در مانگودی‌بی، الستیک‌سرچ و سولِر کلاد***'
* '''ریجِن''' در [[اچ‌بیس]]
* '''تبلِت''' در [[بیگ تیبل]]
* '''وی‌نود''' در [[آپاچی کسندرا|کسندرا]] و ریاک***'
* **وی‌باکت** در کوچ‌بیس

## پارتیشن‌بندی و تکثیر
پارتیشن‌بندی معمولاً در کنار تکثیر پایگاه داده پیاده‌سازی می‌شود، به‌گونه‌ای که نسخه‌هایی از پارتیشن‌ها روی چندین گره ذخیره می‌شوند. هر رکورد به یک پارتیشن تعلق دارد، اما برای تحمل خطا ممکن است روی چندین گره نیز وجود داشته باشد. در سامانه‌های تکثیر ارباب-برده، هر گره می‌تواند به طور هم‌زمان رهبر برخی پارتیشن‌ها و پیرو پارتیشن‌های دیگر باشد.

## متعادل‌سازی بار و نقاط داغ
هدف پارتیشن‌بندی، توزیع یکنواخت داده و بار پرس‌وجو میان گره‌ها است. در حالت توزیع ایده‌آل، ظرفیت سامانه به صورت خطی با افزودن گره‌ها افزایش می‌یابد. به طوری که ده گره باید بتوانند ده برابر داده و توان عملیاتی یک گره منفرد را پردازش کنند. توزیع نامتوازن که با عنوان *skew* شناخته می‌شود، کارایی پارتیشن‌بندی را کاهش می‌دهد. پارتیشن‌هایی که بار بیش‌ازحدی دارند، *نقاط داغ***** نامیده می‌شوند.

چندین راهبرد برای مقابله با نقاط داغ وجود دارد:

* تخصیص تصادفی رکوردها به گره‌ها، به بهای افزایش پیچیدگی بازیابی
* پارتیشن‌بندی مبتنی بر بازه کلید با مرزهای بهینه‌شده
* پارتیشن‌بندی مبتنی بر هش برای توزیع یکنواخت بار

## معیارهای پارتیشن‌بندی
سامانه‌های پیشرفته امروزی مدیریت پایگاه داده رابطه‌ای معیارهای مختلفی را برای تقسیم پایگاه داده فراهم می‌کنند. این سامانه‌ها یک *کلید پارتیشن‌بندی* دریافت کرده و بر اساس معیارهای مشخصی، یک پارتیشن را تعیین می‌کنند. برخی از معیارهای رایج عبارت‌اند از:

* **پارتیشن‌بندی بازه‌ای**: بازه‌های پیوسته‌ای از کلیدها را به پارتیشن‌ها اختصاص می‌دهد، مشابه جلدهای یک دانشنامه. دانستن مرزهای بازه امکان هدایت مستقیم درخواست‌ها را فراهم می‌کند. این مرزها می‌توانند به صورت دستی یا خودکار برای توزیع متعادل تنظیم شوند. اگرچه این روش اسکن بازه‌ای کارآمدی را ممکن می‌سازد، اما برخی الگوهای دسترسی باعث ایجاد نقاط داغ می‌شوند. برای مثال، در شبکه‌های حسگر که از کلیدهای مبتنی بر زمان استفاده می‌کنند، عملیات نوشتن در پارتیشن مربوط به بازه زمانی جاری متمرکز می‌شود. استفاده از کلیدهای مرکب—مانند افزودن شناسه حسگر به ابتدای برچسب زمانی—می‌تواند این بار را توزیع کند. به‌عنوان نمونه، می‌توان پارتیشنی برای تمام ردیف‌هایی داشت که مقدار ستون «کدپستی» آن‌ها بین ۷۰۰۰۰ تا ۷۹۹۹۹ است.
* **پارتیشن‌بندی فهرستی**: در این روش، به هر پارتیشن فهرستی از مقادیر اختصاص داده می‌شود. اگر کلید پارتیشن‌بندی یکی از این مقادیر را داشته باشد، آن پارتیشن انتخاب می‌شود. برای مثال، تمام ردیف‌هایی که مقدار ستون *کشور* در آن‌ها یکی از مقادیر دانمارک، آیسلند، نروژ، سوئد، یا فنلاند است، می‌توانند یک پارتیشن برای کشورهای نوردیک تشکیل دهند.
* **پارتیشن‌بندی ترکیبی**: امکان استفاده از ترکیبی از طرح‌های پارتیشن‌بندی فوق را فراهم می‌کند؛ برای مثال، ابتدا پارتیشن‌بندی بازه‌ای و سپس پارتیشن‌بندی هش اعمال می‌شود. هش‌سازی سازگار را می‌توان ترکیبی از پارتیشن‌بندی هش و فهرستی دانست، که در آن هش فضای کلید را به اندازه‌ای کوچک می‌کند که بتوان آن را فهرست کرد.
* **پارتیشن‌بندی چرخشی**: ساده‌ترین راهبرد است و توزیع یکنواخت داده را تضمین می‌کند. با n پارتیشن، i-اُمین تاپل بر اساس ترتیب درج به پارتیشن (i mod n) اختصاص می‌یابد. این راهبرد امکان دسترسی ترتیبی موازی به یک رابطه را فراهم می‌کند. با این حال، دسترسی مستقیم به تاپل‌های منفرد بر اساس یک شرط، مستلزم دسترسی به کل رابطه است.
* **پارتیشن‌بندی هش**: با اعمال یک تابع هش، داده‌های نامتوازن را به توزیع یکنواخت گسسته تبدیل می‌کند تا بار به طور یکنواخت میان پارتیشن‌ها توزیع شود. اگرچه این روش به طور مؤثری از ایجاد نقاط داغ جلوگیری می‌کند، اما کارایی پرس‌وجوهای بازه‌ای را قربانی می‌سازد، زیرا کلیدهای مجاور در پارتیشن‌های مختلف پراکنده می‌شوند. پیاده‌سازی‌های رایج شامل استفاده از ام‌دی۵ در آپاچی کسندرا و مانگودی‌بی هستند. برخی سامانه‌ها، مانند کسندرا، رویکردهای ترکیبی را با استفاده از کلیدهای اصلی مرکب به‌کار می‌گیرند، به طوری که مؤلفه نخست برای پارتیشن‌بندی هش می‌شود و ترتیب مرتب‌سازی مؤلفه‌های باقی‌مانده درون هر پارتیشن حفظ می‌گردد.

در هر کدام از طرح‌های پارتیشن‌بندی، داده‌ها معمولاً به‌گونه‌ای سازمان‌دهی می‌شوند که هر قطعه داده (رکورد، ردیف یا سند) دقیقاً به یک پارتیشن تعلق داشته باشد. اگرچه برخی پایگاه داده‌ها از عملیات میان‌پارتیشنی پشتیبانی می‌کنند، این وابستگی تک‌پارتیشنی اصل بنیادین مفهوم پارتیشن‌بندی است.

## روش‌های پارتیشن‌بندی
پارتیشن‌بندی می‌تواند یا با ایجاد چندین پایگاه داده کوچک و مستقل (که هر یک جدول‌ها، نمایه‌ها و تراکنش‌های گزارش پایگاه داده مخصوص به خود را دارند) انجام شود، یا با تقسیم عناصر منتخب، برای مثال تنها یک جدول.

### '''پارتیشن‌بندی افقی'''

پارتیشن‌بندی افقی شامل قرار دادن ردیف‌های مختلف، در جدول‌های متفاوت است. برای مثال، مشتریانی که زیپ‌کد آن‌ها کمتر از ۵۰۰۰۰ است در جدول CustomersEast ذخیره می‌شوند، در حالی که مشتریان با زیپ‌کد بزرگ‌تر یا مساوی ۵۰۰۰۰ در جدول CustomersWest قرار می‌گیرند. در این حالت، دو جدول پارتیشن CustomersEast و CustomersWest وجود دارد و می‌توان با ایجاد یک دید به همراه یک دستور یونیون روی هر دو جدول، نمایی کامل از همه مشتریان ارائه داد.

### پارتیشن‌بندی عمودی
پارتیشن‌بندی عمودی شامل ایجاد جدول‌هایی با تعداد ستون کمتر و استفاده از جدول‌های اضافی برای ذخیره ستون‌های باقی‌مانده است. به طور کلی، این عمل با نام نرمال‌سازی شناخته می‌شود. با این حال، پارتیشن‌بندی عمودی ازاین موضوع نیز فراتر می‌رود و حتی ستون‌هایی را که پیش‌تر نرمال‌سازی شده‌اند نیز پارتیشن می‌کند. این نوع پارتیشن‌بندی با عنوان *row splitting* نیز شناخته می‌شود، زیرا ردیف‌ها بر اساس ستون‌هایشان شکافته می‌شوند و می‌تواند به صورت صریح یا ضمنی انجام شود. برای تحقق پارتیشن‌بندی عمودی، ممکن است از ماشین‌های فیزیکی مجزا استفاده شود؛ برای مثال، ذخیره ستون‌هایی که به‌ندرت استفاده می‌شوند یا بسیار عریض هستند و حجم قابل‌توجهی از حافظه را اشغال می‌کنند، روی یک ماشین جداگانه، نوعی پارتیشن‌بندی عمودی محسوب می‌شود. شکل رایج پارتیشن‌بندی عمودی، جداسازی داده‌های ایستا از داده‌های پویا است، زیرا دسترسی به داده‌های ایستا، به‌ویژه در جدولی که داده‌های پویا کمتر مورد استفاده قرار می‌گیرند، سریع‌تر است. ایجاد یک نما روی دو جدول جدید، جدول اصلی را به بهای فدا کردن کارایی بازسازی می‌کند، اما دسترسی صرف به داده‌های ایستا کارایی بالاتری خواهد داشت. یک پایگاه داده ستون‌گرا را می‌توان پایگاه داده‌ای دانست که تا حدی پارتیشن‌بندی عمودی شده است که هر ستون در جدول مخصوص به خود ذخیره می‌شود.

## جستارهای وابسته

* تئوری سی‌ای‌پی
* پهنه‌بندی داده در RAIDها

## یادداشت‌ها


## مراجع

Category:Database management systems
رده:افراز داده