موضوع مقاله: شارد (پایگاه داده) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # شارد (پایگاه داده) | مقدمه: شارد یا خرده پایگاه داده ، یک پارتیشن افقی از داده‌ها در یک پایگاه داده یا موتور جستجو است. | ## بخش 1: شارد (پایگاه داده) | برخی از داده‌ها در یک پایگاه داده در همه شاردها وجود دارند، اما برخی فقط در یک شارد ظاهر می‌شوند. معماری پایگاه داده پارتیشن‌بندی افقی یک اصل طراحی پایگاه داده‌است که به موجب آن ردیف‌های جدول پایگاه داده به جای اینکه به ستون‌ها تقسیم شوند (کاری که نرمال سازی و پارتیشن‌بندی عمودی به میزان‌های مختلف انجام می‌دهند)، به‌طور جداگانه نگهداری می‌شوند. هر پارتیشن بخشی از یک قطعه را تشکیل می‌دهد که ممکن است به نوبه خود در یک سرور پایگاه داده یا مکان فیزیکی جداگانه قرار گیرد. از آنجایی که جداول به چندین سرور تقسیم و توزیع می‌شوند، تعداد کل ردیف‌های هر جدول در هر پایگاه داده کاهش می‌یابد. یک قطعه پایگاه داده را می‌توان بر روی سخت‌افزار جداگانه قرار داد، و نیز چند شارد را می‌توان بر روی چندین ماشین قرار داد. این ویژگی، امکان توزیع پایگاه داده را روی تعداد زیادی ماشین فراهم می‌کند و عملکرد را تا حد زیادی بهبود می‌بخشد. علاوه بر این، اگر شارد پایگاه داده بر اساس بخش‌بندی‌های دنیای واقعی داده‌ها باشد (به عنوان مثال مشتریان اروپایی، مشتریان آمریکایی، ...) در این صورت ممکن است بتوان به راحتی و از روی ماهیت داده به‌طور خودکار شارد مناسب را استنباط کرد و فقط از شارد مربوطه پرس و جو کرد. معایب عبارتند از: بخش اصلی: معایب اتکای بیشتر به اتصال بین سرورها افزایش تأخیر هنگام پرس و جو، به خصوص در مواردی که باید بیش از یک قطعه جستجو شود. داده‌ها یا فهرست‌ها اغلب تنها به یک صورت تقسیم می‌شوند، به طوری که برخی از جستجوها بهینه و برخی دیگر کند یا غیرممکن هستند. مشکلات مربوط به ثبات و دوام به دلیل حالت‌های خرابی پیچیده‌تر که ممکن است شامل خرابی مجموعه‌ای از سرورها بشود، که اغلب باعث می‌شود سیستم‌ها هیچ تضمینی در مورد ثبات یا دوام ارتباط بین شاردها نداشته باشند. اگرچه این کار برای مدت طولانی با کدگذاری دستی انجام شده‌است (مخصوصاً در مواردی که ردیف‌ها دارای یک گروه‌بندی واضح هستند، طبق مثال بالا)، اما هنوز در اغلب موارد انعطاف‌ناپذیر است. همواره تمایل به پشتیبانی خودکار از اشتراک گذاری وجود دارد، هم از نظر افزودن پشتیبانی کد برای آن و هم برای شناسایی نامزدهایی که باید به‌طور جداگانه تقسیم شوند. هش کردن مداوم تکنیکی است که در اشتراک گذاری برای پخش بارهای بزرگ در چندین سرویس و سرور کوچکتر استفاده می‌شود. در جایی که محاسبات توزیع شده برای جداسازی بار بین چندین سرور (به دلایل عملکرد یا قابلیت اطمینان) استفاده می‌شود، یک رویکرد مبتنی بر شارد نیز ممکن است مفید باشد. در مقایسه با پارتیشن‌بندی افقی پارتیشن‌بندی افقی یک یا چند جدول را به ردیف، معمولاً در یک نمونه (instance) واحد شامل یک طرحواره (اسکیما) و یک سرور پایگاه داده تقسیم می‌کند. ممکن است با کاهش اندازه فهرست (و در نتیجه کاهش حجم عمل جستجو) مزیتی را ارائه دهد، مشروط بر اینکه روشی واضح، قوی و ضمنی برای تشخیص اینکه در کدام پارتیشن یک ردیف خاص پیدا می‌شود، بدون نیاز به جستجوی فهرست، وجود داشته باشد، به عنوان مثال، مثال کلاسیک جداول CustomersEast و CustomersWest که کد پستی آنها قبلاً محل یافتن آنها را نشان می‌دهد. شارد بندی عملی فراتر از این است: جدول (های) مشکل ساز را به همان روش پارتیشن‌بندی می‌کند، اما برای این کار از طرحواره (اسکیما) چندین وهله (instance) بالقوه می‌سازد. مزیت آشکار این عمل این است که بار جستجو برای جدول پارتیشن‌بندی شده بزرگ اکنون می‌تواند در چندین سرور (منطقی یا فیزیکی) تقسیم شود، نه فقط چند فهرست روی یک سرور منطقی. تقسیم کردن شاردها در چندین نمونه جدا شده به چیزی بیش از پارتیشن‌بندی افقی ساده نیاز دارد. | ## بخش 2: شارد (پایگاه داده) | در پارتیشن‌بندی چون همه چیز بخش‌بندی می‌شود برای داده‌های ساده مثلاً یک جدول ابعاد ساده نیز بخش‌بندی می‌شوند و برای بازیابی داده از آنه هم نیاز به پرس و جوی چند نمونه ای (multiple instances) به وجود می‌آید که در عمل همه دستاوردهای مورد انتظار در خصوص بهبود کارایی را از بین می‌برد. اما شارد بندی جداول بزرگ قابل پارتیشن‌بندی را در سرورها تقسیم می‌کند، در حالی که جداول کوچکتر را به سادگی و به‌طور کامل روی این سرورها تکرار می‌کند و این باعث می‌شود که در جستجوهای ساده از جداول کوچک نیازی به پرس و جوهای بین چند نمونه ای نباشد و باعث افت عملکرد نگردد، این مزیت شارد بندی نسبت به پارتیشن‌بندی است . همچنین به همین دلیل است که شاردینگ به معماری هیچ چیز مشترک مربوط می‌شود - پس از خرد شدن، هر شارد می‌تواند در یک نمونه طرحواره (اسکیما) منطقی کاملاً مجزا / سرور پایگاه داده فیزیکی / مرکز داده / قاره جداگانه قرار بگیرد. هیچ نیاز مداومی به حفظ دسترسی مشترک (از بین شاردها) به سایر جداول پارتیشن نشده در دیگر شاردها وجود ندارد. این کار تکثیر در چندین سرور را آسان می‌کند (پارتیشن‌بندی افقی ساده این کار را نمی‌کند). همچنین برای توزیع جهانی برنامه‌ها مفید است، جایی که پیوندهای ارتباطی بین مراکز داده اگر به روشی غیر از این انجام شود، تبدیل به یک گلوگاه خواهد شد. همچنین نیاز به برخی مکانیسم‌های اعلان و تکرار بین نمونه‌های طرحواره (schema instances) وجود دارد، به طوری که جداول پارتیشن نشده به همان میزانی که برنامه درخواست می‌کند، هماهنگ باقی بمانند. این یک انتخاب پیچیده در معماری سیستم‌های خرد شده (سیستمهای مبتنی بر شارد) است: رویکردها معمولاً محدوده ای مابین ساخت این موارد فقط خواندنی (به‌روزرسانی‌ها نادر و بصورت دسته‌ای هستند)، تا ایجاد جداول تکرارشونده پویا (به بهای کاهش برخی از مزایای توزیع در شارد بندی) و بسیاری از گزینه‌های بینابین این دو را شامل می‌شود. پیاده‌سازی‌ها آلتی بیس معماری شارد بندی ترکیبی (سمت مشتری و سمت سرور) را برای برنامه‌های مشتری شفاف ارائه می‌دهد. پایگاه داده آژور اس کیو ال برای کوچک کردن ابزارهای پایگاه داده الاستیک و نیز در لایه داده‌های یک برنامه کاربردی، از شارد استفاده می‌کند. کلیک هاوس، یک سیستم مدیریت پایگاه داده او لپ OLAP منبع باز سریع، از شارد استفاده می‌کند. شاردهای کوبرید از نسخه ۹٫۰ ویژگی پارتیشن‌بندی داده‌های دی بی ۲ (ام پی پی) که یک پارتیشن پایگاه داده هیچ چیز-مشترک است که بر روی گره‌های جداگانه اجرا می‌شود. دی آر دی اس (سرویس پایگاه داده ارتباطی توزیع شده) علی بابا کلود شارد بندی پایگاه داده/جدول را انجام می‌دهد، و رویداد فروش روز مجردها را پشتیبانی می‌کند. از شاردینگ برای دستیابی به مقیاس پذیری در بین پردازشها برای داده‌ها و پردازش موازی به سبک نگاشت کاهش MapReduce استفاده می‌کند. آی بی ام اینفورمیکس از نسخه 12.1 xC1 به عنوان بخشی از فناوری MACH11 استفاده می‌کند. مانت دی بی (MonetDB)، یک پایگاه داده ستونی منبع باز، در نسخه ژوئیه ۲۰۱۵ خود، شاردینگ فقط خواندنی را انجام می‌دهد. مای اس کیو ال کلاستر به‌طور خودکار و شفاف در گره‌های کالای کم‌هزینه خرد می‌شود و اجازه می‌دهد تا درخواست‌های خواندن و نوشتن را بدون نیاز به تغییر در برنامه کاهش دهند. شاردهای پایگاه داده اوراکل از نسخه 12c نسخه ۲ و در یک لاینر: ترکیبی از مزایای شاردینگ با قابلیت‌های شناخته شده پایگاه داده چند مدل آماده سازمانی اوراکل. پایگاه داده اوراکل نو اس کیو ال دارای تقسیم خودکار و گسترش الاستیک و آنلاین خوشه (افزودن شاردهای بیشتر) است. | ## بخش 3: شارد (پایگاه داده) | اسپنر، پایگاه داده توزیع شده در مقیاس جهانی گوگل، در چند دستگاه ایالتی پکزاس به مقیاس «میلیون‌ها دستگاه در صدها مرکز داده و تریلیون‌ها ردیف پایگاه داده» شارد بندی می‌شود. ترادیتا یک سیستم مدیریت پایگاه داده موازی عظیم را به عنوان یک " انبار داده " به بازار عرضه می‌کند. واُلت، یک ارز دیجیتال، برای کاهش شدید داده‌هایی که کاربران برای پیوستن به شبکه و تأیید تراکنش‌ها نیاز دارند، از شارد استفاده می‌کند. سیستم خوشه بندی پایگاه داده منبع باز ویتس از شاردهای مای اسکیو ال استفاده می‌کند. شاردینگ اسفر مربوط به یک سیستم خوشه بندی پایگاه داده‌است که اشتراک گذاری داده‌ها، تراکنش‌های توزیع شده و مدیریت پایگاه داده توزیع شده را ارائه می‌دهد. معایب شارد بندی جدول پایگاه داده قبل از بهینه‌سازی محلی باعث پیچیدگی زودرس می‌شود. شاردینگ باید تنها زمانی مورد استفاده قرار گیرد که همه گزینه‌های دیگر برای بهینه‌سازی ناکافی باشند. پیچیدگی مزبور در اشتراک گذاری پایگاه داده باعث مشکلات احتمالی زیر می‌شود: پیچیدگی زبان پرس و جو SQL - افزایش اشکالات زیرا توسعه دهندگان باید SQL پیچیده تری بنویسند تا منطق اشتراک گذاری را مدیریت کنند. نرم‌افزار اضافی - که پارتیشن‌بندی، تعادل، تطبیق را انجام دهد و تضمین کند که یکپارچگی شکست نخورد نقطه یکتای خرابی - خراب شدن یک شارد به دلیل مشکلات شبکه/سخت‌افزار/سیستم باعث خرابی کل جدول می‌شود. پیچیدگی غلبه بر خرابی سرور - سرورهای خراب باید کپی‌هایی از ناوگان شاردهای پایگاه داده داشته باشند. پیچیدگی پشتیبان‌گیری - پشتیبان‌گیری پایگاه داده از تک تک شاردهای باید با نسخه‌های پشتیبان سایر شاردها هماهنگ شود. پیچیدگی عملیاتی - افزودن/حذف نمایه‌ها، افزودن/حذف ستون‌ها، اصلاح طرحواره بسیار دشوارتر می‌شود. این پیچیدگی‌های تاریخی مربوط به فرایند خودتان-انجام-بدهید شاردینگ، ایده ای برای فروشندگان نرم‌افزار مستقل شد تا روش‌های شاردینگ خودکار را ارائه بدهند. (بر خلاف پارتیشن‌بندی افقی)؛ یا بازی ویدئویی سبک ام ام او آر پی جی به نام آلتیما آنلاین که در سال ۱۹۹۷ مورد تحسین منتقدان قرار گرفت، ۸ رکورد جهانی گینس را ثبت کرد و توسط تایم به عنوان یکی از ۱۰۰ بازی ویدیویی برتر تولید شده در تمام دوران معرفی شد. اگرچه بوم‌شناسی مجازی در طول آزمایش‌های داخلی طبق برنامه عمل می‌کرد، اما تعادل طبیعی آن تقریباً فوراً از بین رفت زیرا بازیکنان سریع‌تر از آنچه سیستم تخم‌ریزی می‌توانست کار کند، تمام حیات‌وحش‌های زنده در سراسر منطقه قابل بازی را از بین می‌بردند. تیم سازنده گاریوت سعی کرد این مشکل را با جدا کردن پایه بازیکنان جهانی به جلسات جداگانه کاهش دهد و بخشی از ارتباط داستانی آلتیما آنلاین را به صورت پایان اولتیما ۱: اولین دوران تاریکی بازنویسی کند، جایی که شکست شخصیت آن مونداین منجر به ایجاد «شارد» چندجهانی شد. این اصلاح بهانه و توجیه تخیلی مورد نیاز برای ایجاد چندین کپی از محیط مجازی را در اختیار تیم گاریوت قرار داد. با این حال، افزایش شدید تحسین منتقدان از بازی همچنین به این معنی نیز بود که سیستم زیست‌محیطی مجازی چندجهانی جدید نیز به سرعت (دربرابر حجم استقبال بازیگران جدید) ناکافی گردید. پس از چندین ماه آزمایش، تیم گاریوت تصمیم گرفت که این ویژگی را به کلی کنار بگذارد و عملکرد بازی را از بین ببرد. | ## جمع‌بندی | امروزه اصطلاح «شارد» به استقرار و استفاده از سخت‌افزار اضافی در سیستم‌های پایگاه داده اشاره دارد.