MongoDb در سی شارپ (بخش چهارم)
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: سه دقیقه

در این بخش قصد داریم در مورد Chunk شدن فایل‌ها بدانیم. ولی قبل از هر چیز، نیاز است که ابتدا با اصول اولیه مونگو و حتی بانک‌های nosql آشنا شویم.

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

Sharding : یک خوشه شاردینگ(Sharded Cluster) در واقع مجموعه‌ای از همین سرورهای ریپلیکیشن میباشد که ماموریتشان توزیع یکسان بار، بر روی سرورهاست که به ما امکان مدیریت داده‌های حجیم و توسعه و به روزرسانی افقی سرورها (Horizontally Scale) را میدهد.
از این پس میدانیم که ریپلیکیشن‌ها شامل داده‌های یکسانی بوده و شاردینگ‌ها، تقسیم بندی دیتا را صورت میدهند و هر شارد میتواند شامل رپلیکشن‌های متفاوتی باشد.

اصلی‌ترین هدف این خوشه شاردینگ‌ها عبارتند از:
1-  مقیاس پذیری: توزیع بار پردازشی بر روی سرور‌های مختلف.
2- موازنه سازی لود دیتا: دیتا به طور خودکار در بین شاردهای مختلف توزیع می‌شود. موازنه‌گر تصمیم میگیرد که چگونه دیتا انتقال داده شده و به چه سروری منتقل شود و از طریق یک کلید به نام Partition Key رنج بندی دیتا را انجام میدهد تا بداند هر شاردی، چه رنج دیتایی را شامل میشود.

تصویر بالا به شما نشان میدهد که کلاینت‌ها ابتدا به مسیریاب‌ها متصل می‌شوند. این مسیریاب‌ها بر اساس فایل‌های پیکربندی که مدیر سیستم آماده کرده است و شامل تنظیمات موازنه گر میباشد، کلاینت‌ها را به شاردینگ‌های‌ها مورد نظر متصل میکنند و بعد از آن هم انتخاب سرور از رپلیکیشن.


عملیات Chunk یا قطعه سازی فایل‌ها، بر اساس همین تعداد شاردینگ‌های مختلف می‌باشد که به صورت انتزاعی یا مفهومی ایجاد شده‌است و شامل دیتای اصلی نمیشود؛ بلکه شامل اطلاعاتی برای هر قطعه از دیتاها میشود که شامل یک کلید به نام SharedKey میباشد و دو مقدار Min و Max را برای هر رنج دیتا شامل میشود.

بعد از اینکه Chunk‌های یک فایل مشخص شد، مونگو برای حفظ موازنه و بالانس شاردینگ‌ها، شروع به تقسیم این چانک‌ها میکند. به عنوان مثال تعدادی چانک، بین این شاردینگ و تعدادی دیگر برای شاردینگ‌های دیگر. جدول زیر نحوه توزیع 4 چانک را نشان میدهد:


 شارد نهایت مقدار  Max
حداقل مقدار Min
 شناسه یا Id چانک
 “shard” : “shard0001”   “max” : { “x” : 8000 }   “min” : { “x” : 7000 }   “_id” : “testdb.presplit-x_7000.0” 
 “shard” : “shard0001”   “max” : { “x” : 9000 }   “min” : { “x” : 8000 }   “_id” : “testdb.presplit-x_8000.0” 
  “shard” : “shard0002” 
 “max” : { “x” : 10000 }   “min” : { “x” : 9000 }   “_id” : “testdb.presplit-x_9000.0” 
 “shard” : “shard0002”   “max” : { “x” : 11000 }   “min” : { “x” : 10000 }   “_id” : “testdb.presplit-x_10000.0” 

  این تقسیم چانک‌ها باید طوری باشد که سرور‌ها همیشه در حالت موازنه باشند و بالانس خود را حفظ کنند. جدول زیر به شما کمک میکند که بدانید سرور بالانس است یا خیر.
 تعداد چانک ها
 میزان تفاوت
 کمتر از 20 عدد
 2
 20 تا 79
 4
 از 79 عدد بیشتر
 8

برای درک این مسئله، فرض کنید ما 2 عدد شارد داریم و 31 عدد چانک. اگر 17 عدد از چانک‌ها به شارد 1 برسد و 14 تای باقی مانده به شارد شماره 2 برسد، اختلاف این تعداد شاردها سه میباشد که طبق جدول تا 4 عدد جا دارد. پس بالانسی بین شاردها بر قرار است. موقعی که فایلی به مقدار مشخص شده‌ی برای چانک برسد که به طور پیش فرض 64 مگابایت می‌شود، شروع به چانک گذاری کرده و برای حفظ بالانس و موازنه سازی، این چانک‌ها را بین شاردهای مختلف توزیع میکند و چانک را از سروری که شامل چانک‌های زیاد است، به سروری که شامل چانک‌های کمتر است منتقل میکند.

  • #
    ‫۷ سال و ۶ ماه قبل، شنبه ۲۱ اسفند ۱۳۹۵، ساعت ۱۶:۳۵
    سلام 
    این عمل چانک و شاردینگ باید به صورت موازی انجام شود و اینکه برای این کار باید در 2 سرور اطلاعات بانک وجود داشته باشد یا اینکه این موضوع را خود MongoDb هندل می‌می کند؟
    نحوه پیاده سازی آن چگونه است؟
    تشکر
    • #
      ‫۷ سال و ۶ ماه قبل، شنبه ۲۱ اسفند ۱۳۹۵، ساعت ۱۷:۰۶
      عملیات چانک و انتقال‌ها تمام توسط خود مونگو هندل میشود و برای تنظیمات آن که در مقالات آتی ذکر خواهیم کرد نیاز است آن فایل‌های پیکربندی که در تصویر بالا هم می‌بینید را انجام دهید.