JavadAgha
JavadAgha
خواندن ۲ دقیقه·۶ ماه پیش

پارتیشن‌بندی افقی و پارتیشن‌بندی عمودی

در بسیاری از برنامه‌های مقیاس بزرگ، داده‌ها به بخش‌هایی تقسیم می‌شوند که می‌توانند به طور جداگانه دسترسی داشته باشند. دو استراتژی معمول برای بخش‌بندی/ پارتیشن‌بندی داده‌ها وجود دارد.

پارتیشن‌بندی عمودی: به این معنی که برخی از ستون‌ها به جدول‌های جدید منتقل می‌شوند. هر جدول حاوی همان تعداد ردیف اما ستون‌های کمتر است (نمودارزیر را ببینید).

پارتیشن‌بندی افقی (که اغلب شاردینگ(sharding) نامیده می‌شود): یک جدول را به چندین جدول کوچکتر تقسیم می‌کند. هر جدول یک ذخیره‌گاه داده‌ای جداگانه است و همان تعداد ستون‌ها را دارد، اما تعداد ردیف‌ها کمتر است (نمودار زیر را ببینید)

پارتیشن‌بندی افقی به طور گسترده ای استفاده می شود، بنابراین اجازه دهید نگاهی دقیق‌تر داشته باشیم.

الگوریتم مسیریابی

الگوریتم مسیریابی تصمیم می‌گیرد که کدام پارتیشن ‌(shard) داده‌ها را ذخیره می کند.

پارتیشن‌بندی بر اساس محدوده(Range-based sharding). این الگوریتم از ستون های مرتب شده، مانند اعداد صحیح، اعداد بزرگ و timestampها، برای جدا کردن ردیف‌ها استفاده می‌کند. برای مثال، نمودار زیر از ستون شناسه کاربر برای پارتیشن‌بندی محدوده استفاده می کند: شناسه های کاربر 1 و 2 در بخش 1 هستند، شناسه های کاربر 3 و 4 در بخش 2 هستند.

پارتیشن‌بندی بر اساس هش. این الگوریتم یک تابع هش را به یک ستون یا چندین ستون اعمال می کند تا تصمیم بگیرد که کدام ردیف به کدام جدول برود. برای مثال در نمودار قبل از User ID mod 2 به عنوان یک تابع هش استفاده می کند. شناسه های کاربر 1 و 3 در بخش(shard)شماره 1 هستند، شناسه های کاربر 2 و 4 در بخش شماره 2 هستند.

مزایا

امکان مقیاس‌بندی افقی را تسهیل می‌کند. پارتیشن‌بندی امکان افزودن ماشین‌هایی بیشتر برای توزیع بار را فراهم می‌کند.

زمان پاسخ دهی را کوتاه می‌کند. با پارتیشن‌بندی یک جدول به چندین جدول، کوئری‌ها از میان تعداد کمتری ردیف عبور می کنند و نتایج بسیار سریعتر بازگردانده می‌شوند

معایب

  • عملیات مرتب سازی پیچیده تر است. معمولاً لازم است داده ها از بخش های مختلف بازیابی شده و در کد برنامه مرتب شوند.
  • توزیع غیریکنواخت. برخی از shard ها ممکن است داده های بیشتری نسبت به سایر shard ها داشته باشند (به این حالت hotspot نیز گفته می شود).


shardingمهندسی نرم افزارطراحی سیستم های نرم افزاریdatabasesql
کنجکاو در مباحث مهندسی نرم افزار
شاید از این پست‌ها خوشتان بیاید