MongoDb در سی شارپ (بخش چهارم)
نویسنده: علی یگانه مقدم
تاریخ: ۱۳۹۵/۱۲/۱۵ ۱۹:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
تصویر بالا به شما نشان میدهد که کلاینتها ابتدا به مسیریابها متصل میشوند. این مسیریابها بر اساس فایلهای پیکربندی که مدیر سیستم آماده کرده است و شامل تنظیمات موازنه گر میباشد، کلاینتها را به شاردینگهایها مورد نظر متصل میکنند و بعد از آن هم انتخاب سرور از رپلیکیشن.
عملیات
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 مگابایت میشود، شروع به چانک گذاری کرده و برای حفظ بالانس و موازنه سازی، این چانکها را بین شاردهای مختلف توزیع میکند و چانک را از سروری که شامل چانکهای زیاد است، به سروری که شامل چانکهای کمتر است منتقل میکند.