شارد (پایگاه داده)

از ویکی‌پدیا، دانشنامهٔ آزاد

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

برخی از داده‌ها در یک پایگاه داده در همه شاردها وجود دارند، [الف] اما برخی فقط در یک شارد ظاهر می‌شوند. هر شارد (یا سرور) به عنوان یک منبع واحد برای این زیر مجموعه داده عمل می‌کند.

معماری پایگاه داده[ویرایش]

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

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

معایب عبارتند از:

بخش اصلی: معایب

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

در عمل، به اشتراک گذاری پیچیده‌است. اگرچه این کار برای مدت طولانی با کدگذاری دستی انجام شده‌است (مخصوصاً در مواردی که ردیف‌ها دارای یک گروه‌بندی واضح هستند، طبق مثال بالا)، اما هنوز در اغلب موارد انعطاف‌ناپذیر است. همواره تمایل به پشتیبانی خودکار از اشتراک گذاری وجود دارد، هم از نظر افزودن پشتیبانی کد برای آن و هم برای شناسایی نامزدهایی که باید به‌طور جداگانه تقسیم شوند. هش کردن مداوم تکنیکی است که در اشتراک گذاری برای پخش بارهای بزرگ در چندین سرویس و سرور کوچکتر استفاده می‌شود.[۱]

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

در مقایسه با پارتیشن‌بندی افقی[ویرایش]

پارتیشن‌بندی افقی یک یا چند جدول را به ردیف، معمولاً در یک نمونه (instance) واحد شامل یک طرحواره (اسکیما) و یک سرور پایگاه داده تقسیم می‌کند. ممکن است با کاهش اندازه فهرست (و در نتیجه کاهش حجم عمل جستجو) مزیتی را ارائه دهد، مشروط بر اینکه روشی واضح، قوی و ضمنی برای تشخیص اینکه در کدام پارتیشن یک ردیف خاص پیدا می‌شود، بدون نیاز به جستجوی فهرست، وجود داشته باشد، به عنوان مثال، مثال کلاسیک جداول CustomersEast و CustomersWest که کد پستی آنها قبلاً محل یافتن آنها را نشان می‌دهد.

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

تقسیم کردن شاردها در چندین نمونه جدا شده به چیزی بیش از پارتیشن‌بندی افقی ساده نیاز دارد. در پارتیشن‌بندی چون همه چیز بخش‌بندی می‌شود برای داده‌های ساده مثلاً یک جدول ابعاد ساده نیز بخش‌بندی می‌شوند و برای بازیابی داده از آنه هم نیاز به پرس و جوی چند نمونه ای (multiple instances) به وجود می‌آید که در عمل همه دستاوردهای مورد انتظار در خصوص بهبود کارایی را از بین می‌برد. اما شارد بندی جداول بزرگ قابل پارتیشن‌بندی را در سرورها تقسیم می‌کند، در حالی که جداول کوچکتر را به سادگی و به‌طور کامل روی این سرورها تکرار می‌کند و این باعث می‌شود که در جستجوهای ساده از جداول کوچک نیازی به پرس و جوهای بین چند نمونه ای نباشد و باعث افت عملکرد نگردد، این مزیت شارد بندی نسبت به پارتیشن‌بندی است .[نیازمند شفاف‌سازی]

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

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

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

پیاده‌سازی‌ها[ویرایش]

  • آلتی بیس معماری شارد بندی ترکیبی (سمت مشتری و سمت سرور) را برای برنامه‌های مشتری شفاف ارائه می‌دهد.
  • اچ بیس می‌تواند به‌طور خودکار خرد شود.[۲]
  • پایگاه داده آژور اس کیو ال برای کوچک کردن ابزارهای پایگاه داده الاستیک و نیز در لایه داده‌های یک برنامه کاربردی، از شارد استفاده می‌کند.[۳]
  • کلیک هاوس، یک سیستم مدیریت پایگاه داده او لپ OLAP منبع باز سریع، از شارد استفاده می‌کند.
  • کوچ بیس به صورت خودکار و شفاف از شارد استفاده می‌کند.
  • شاردهای کوبرید از نسخه ۹٫۰
  • ویژگی پارتیشن‌بندی داده‌های دی بی ۲ (ام پی پی) که یک پارتیشن پایگاه داده هیچ چیز-مشترک است که بر روی گره‌های جداگانه اجرا می‌شود.
  • دی آر دی اس (سرویس پایگاه داده ارتباطی توزیع شده) علی بابا کلود شارد بندی پایگاه داده/جدول را انجام می‌دهد،[۴] و رویداد فروش روز مجردها را پشتیبانی می‌کند.[۵]
  • شاردهای سرور جستجوی سازمانی الستیک سرچ.[۶]
  • مقیاس اکستریم eXtreme یک ذخیره‌سازی اطلاعات کلید/مقدار مستقل از پردازش مقیم در حافظه (یک ذخیره‌سازی داده نو اس کیو ال NoSQL) است. از شاردینگ برای دستیابی به مقیاس پذیری در بین پردازشها برای داده‌ها و پردازش موازی به سبک نگاشت کاهش MapReduce استفاده می‌کند.[۷]
  • شاردهای هایبرنیت Hibernate، البته از سال ۲۰۰۷ توسعه کمی داشته‌اند.[۸][۹]
  • آی بی ام اینفورمیکس از نسخه 12.1 xC1 به عنوان بخشی از فناوری MACH11 استفاده می‌کند. اینفورمیکس 12.10 xC2 سازگاری کامل را با درایورهای مانگو دی بی (MongoDB) اضافه کرده‌است، و امکان ترکیب جداول رابطه‌ای معمولی با مجموعه‌های نو اس کیو ال (NoSQL) را فراهم می‌کند، در حالی که همچنان ویژگی‌های غلبه بر خطا (fail-over)، شاردینگ و اسید (ACID) را ممکن می‌سازد.[۱۰][۱۱]
  • شاردهای‌های ک دی بی پلاس (Kdb+) از نسخه ۲٫۰.
  • مانت دی بی (MonetDB)، یک پایگاه داده ستونی منبع باز، در نسخه ژوئیه ۲۰۱۵ خود، شاردینگ فقط خواندنی را انجام می‌دهد.[۱۲]
  • شارهای مانگو دی بی MongoDB از نسخه ۱٫۶.
  • مای اس کیو ال کلاستر به‌طور خودکار و شفاف در گره‌های کالای کم‌هزینه خرد می‌شود و اجازه می‌دهد تا درخواست‌های خواندن و نوشتن را بدون نیاز به تغییر در برنامه کاهش دهند.[۱۳]
  • شاردهای مای اس کیو ال فابریک (بخشی از ابزارهای MySQL).[۱۴]
  • شاردهای پایگاه داده اوراکل از نسخه 12c نسخه ۲ و در یک لاینر: ترکیبی از مزایای شاردینگ با قابلیت‌های شناخته شده پایگاه داده چند مدل آماده سازمانی اوراکل.[۱۵]
  • پایگاه داده اوراکل نو اس کیو ال دارای تقسیم خودکار و گسترش الاستیک و آنلاین خوشه (افزودن شاردهای بیشتر) است.
  • شاردهای اورینت دی بی از نسخه ۱٫۷
  • شاردهای سرور جستجوی سازمانی آپاچی سولار.[۱۶]
  • اسپنر، پایگاه داده توزیع شده در مقیاس جهانی گوگل، در چند دستگاه ایالتی پکزاس به مقیاس «میلیون‌ها دستگاه در صدها مرکز داده و تریلیون‌ها ردیف پایگاه داده» شارد بندی می‌شود.[۱۷]
  • او آر ام اس کیو ال آلکمی، یک نگاشت داده برای شاردهای زبان برنامه‌نویسی پایتون.[۱۸]
  • اس کیو ال سرور، از نسخه SQL Server 2005 به بعد با کمک ابزارهای شخص ثالث شارد می‌شود.[۱۹]
  • ترادیتا یک سیستم مدیریت پایگاه داده موازی عظیم را به عنوان یک " انبار داده " به بازار عرضه می‌کند.
  • واُلت، یک ارز دیجیتال، برای کاهش شدید داده‌هایی که کاربران برای پیوستن به شبکه و تأیید تراکنش‌ها نیاز دارند، از شارد استفاده می‌کند. این عمل به شبکه اجازه می‌دهد تا مقیاس پذیری بسیار بیشتری داشته باشد.[۲۰]
  • سیستم خوشه بندی پایگاه داده منبع باز ویتس از شاردهای مای اسکیو ال استفاده می‌کند. این یک پروژه بنیاد محاسبات بومی ابری است.[۲۱]
  • شاردینگ اسفر مربوط به یک سیستم خوشه بندی پایگاه داده‌است که اشتراک گذاری داده‌ها، تراکنش‌های توزیع شده و مدیریت پایگاه داده توزیع شده را ارائه می‌دهد. این یک پروژه بنیاد نرم‌افزار آپاچی (ASF) است.[۲۲]

معایب[ویرایش]

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

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

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

ریشه یابی واژه[ویرایش]

در علم پایگاه داده، اصطلاح «شارد» به احتمال زیاد از یکی از دو منبع مشتق شده‌است: عبارت اختصاری به کار برده شده توسط شرکت کامپیوتری آمریکا که مخفف عبارت «سیستمی برای داده‌های تکراری بسیار در دسترس» می‌باشد[۲۳] و از سخت‌افزار اضافی برای تسهیل تکثیر داده‌ها استفاده می‌کند. (بر خلاف پارتیشن‌بندی افقی)؛ یا بازی ویدئویی سبک ام ام او آر پی جی به نام آلتیما آنلاین که در سال ۱۹۹۷ مورد تحسین منتقدان قرار گرفت، ۸ رکورد جهانی گینس را ثبت کرد و توسط تایم به عنوان یکی از ۱۰۰ بازی ویدیویی برتر تولید شده در تمام دوران معرفی شد.[۲۴][۲۵]

ریچارد گاریوت، خالق آلتیما آنلاین، این واژه را از مرحله تولید بازی به یاد می‌آورد، زمانی که آنها تلاش کردند یک سیستم بوم‌شناسی مجازی خودتنظیمی ایجاد کنند، که به موجب آن بازیکنان می‌توانند از دسترسی جدید به اینترنت (یک فناوری انقلابی در آن زمان) برای تعامل و برداشت منابع بازی استفاده کنند.[۲۶] اگرچه بوم‌شناسی مجازی در طول آزمایش‌های داخلی طبق برنامه عمل می‌کرد، اما تعادل طبیعی آن تقریباً فوراً از بین رفت زیرا بازیکنان سریع‌تر از آنچه سیستم تخم‌ریزی می‌توانست کار کند، تمام حیات‌وحش‌های زنده در سراسر منطقه قابل بازی را از بین می‌بردند. تیم سازنده گاریوت سعی کرد این مشکل را با جدا کردن پایه بازیکنان جهانی به جلسات جداگانه کاهش دهد و بخشی از ارتباط داستانی آلتیما آنلاین را به صورت پایان اولتیما ۱: اولین دوران تاریکی بازنویسی کند، جایی که شکست شخصیت آن مونداین منجر به ایجاد «شارد» چندجهانی شد. این اصلاح بهانه و توجیه تخیلی مورد نیاز برای ایجاد چندین کپی از محیط مجازی را در اختیار تیم گاریوت قرار داد. با این حال، افزایش شدید تحسین منتقدان از بازی همچنین به این معنی نیز بود که سیستم زیست‌محیطی مجازی چندجهانی جدید نیز به سرعت (دربرابر حجم استقبال بازیگران جدید) ناکافی گردید. پس از چندین ماه آزمایش، تیم گاریوت تصمیم گرفت که این ویژگی را به کلی کنار بگذارد و عملکرد بازی را از بین ببرد.

امروزه اصطلاح «شارد» به استقرار و استفاده از سخت‌افزار اضافی در سیستم‌های پایگاه داده اشاره دارد.

جستارهای وابسته[ویرایش]

یادداشت[ویرایش]

  1. Typically 'supporting' data such as dimension tables

منابع[ویرایش]

  1. Ries, Eric. "Sharding for Startups".
  2. "Apache HBase – Apache HBase™ Home". hbase.apache.org.
  3. "Introducing Elastic Scale preview for Azure SQL Database". azure.microsoft.com.
  4. "Alibaba Cloud Help Center - Cloud Definition and Explanation of Cloud Based Services - Alibaba Cloud". www.alibabacloud.com.
  5. "Focuses on Large-Scale Online Databases - Alibaba Cloud". www.alibabacloud.com.
  6. "Index Shard Allocation | Elasticsearch Guide [7.13] | Elastic". www.elastic.co.
  7. "IBM Docs".
  8. "Hibernate Shards". 2007-02-08.
  9. "Hibernate Shards". Archived from the original on 16 December 2008. Retrieved 9 June 2022.
  10. "New Grid queries for Informix". Archived from the original on 10 June 2015. Retrieved 9 June 2022.
  11. "NoSQL support in Informix (JSON storage, Mongo DB API)". September 24, 2013.
  12. "MonetDB July2015 Released". 31 August 2015.
  13. "MySQL Cluster Features & Benefits". 2012-11-23.
  14. "MySQL Fabric sharding quick start guide". Archived from the original on 16 January 2017. Retrieved 9 June 2022.
  15. "Oracle Sharding". Oracle. 2018-05-24. Retrieved 2021-07-10.
  16. "DistributedSearch - SOLR - Apache Software Foundation". cwiki.apache.org.
  17. Corbett, James C; Dean, Jeffrey; Epstein, Michael; Fikes, Andrew; Frost, Christopher; Furman, JJ; Ghemawat, Sanjay; Gubarev, Andrey; Heiser, Christopher. "Spanner: Google's Globally-Distributed Database" (PDF). Proceedings of OSDI 2012. Retrieved 24 February 2014.
  18. "sqlalchemy/sqlalchemy". July 9, 2021.
  19. "Partitioning and Sharding Options for SQL Server and SQL Azure". infoq.com.
  20. "A faster, more efficient cryptocurrency". MIT News. Retrieved 2019-01-30.
  21. "Vitess". vitess.io.
  22. "ShardingSphere". shardingsphere.apache.org.
  23. Sarin, DeWitt & Rosenberg, Overview of SHARD: A System for Highly Available Replicated Data, Technical Report CCA-88-01, Computer Corporation of America, May 1988
  24. Koster, Raph (2009-01-08). "Database "sharding" came from UO?". Raph Koster's Website. Retrieved 2015-01-17.
  25. "Ultima Online: The Virtual Ecology | War Stories". Ars Technica Videos (به انگلیسی). Retrieved 2020-06-04.
  26. "Ultima Online: The Virtual Ecology | War Stories". Ars Technica Videos.

پیوند به بیرون[ویرایش]