mongoDB (مونگودیبی) یک Document-oriented database (پایگاه داده سند-گرا) است. و در گروه پایگاههای داده NOSQL قرار دارد.
در این نوع پایگاه داده جدول و رکورد وجود ندارد و از collection (مجموعه) و سند استفاده میشود. میتوان گفت مجموعه شبیه به جدول و سند شبیه به رکورد در پایگاه داده رابطهای است.
در این پایگاه داده، دادهها ساختار ثابت ندارند و هر دو سند (شبیه رکورد در پایگاه رابطهای) میتواند ساختار کاملا متفاوت داشته باشد، به این نوع ساختار BSON میگویند. به عنوان مثال ممکن است دو سند از یک موجودیت در این پایگاهداده به اشکال زیر موجود باشد:
سند ۱:
id_ – name – age
سند ۲:
id_ – family
BSON چیست؟ مونگودیبی دادهها را به شکل json ذخیره میکند. به این ساختار در مونگودیبی BSON میگویند. ساختار BSON به شکل زیر است.
{ "_id": ObjectId("b7d284dad1058f5698gorjhdc"), "Name": "mahdi", "age": "30", "Date of Birth": "21/05/79", "address": { "city": "mashhad", "PostalCode": "9139555789" }, "phoneNumber":[ { "type" : "Home", "number": "58795555" }, { "type" : "work", "number": "05117673600" } ] }
از مزیتهای پایگاه داده مونگودیبی نسبت سایر پایگاههای داده رابطهای (مانند MySQL) امکان پردازش و جستجو در حجم بسیار بالاتری از دادهها در لحظه و همچنین امکان دخیره حجم بالاتری از دادهها است.
سرعت پردازش بالاتر: پایگاه داده رابطهای در هر جستجو و یا در هر ذخیره داده باید شروط زیادی مانند روابط بین جدولها و صحت مقادیر رکوردها را بررسی کند که این پروسهها سربار RAM و CPU را به شدت افزایش میدهد در حالیکه مونگودیبی به دلیل ساختار NOSQL تنها دخیره و جستجو میکند و در نتیجه سرعت دستیابی و ذخیره دادهها به شدت کاهش مییابد.
ذخیره حجم بالاتر دیتا: پایگاههای داده به دو شکل میتواند حجم دادههای قابل ذخیره در سیستم را افزایش دهند. horizontal-scaling و vertical-scaling.
- vertical scaling: در این روش دیتاها روی یک node ذخیره میشود و برای افزایش حجم دادهها RAM و CPU یا Hard Disk (هارد) را افزایش میدهیم. از جمله پایگاه دادهای که از این روش استفاده میکنند میتوان MySQL را نام برد.
- horizontal-scaling: در این روش داده در روی nodeهای متفاوت پخش، و هر قسمت از دادهها در یک سرور دخیره میشود، بدین ترتیب بار پردازش روی سرورهای متفاوت پخش خواهد شد و سرعت دسترسی به دادهها و حجم دادههای قابل ذخیره افزایش خواهد یافت. دیتابیسهایی که از این روش استفاده میکنند مونگودیبی و cassandra را میتوان نام برد.
همانطور که در بالا گفتیم در مونگودیبی میتوان با استاده از horizontal-scaling که shard نامیده میشود حجم داده قابل ذخیره و همچین سرعت دسترسی به داده را افزایش داد.
مزیتهای استفاده از shard:
- با گسترش کلاستر تعداد پردازشهایی که هر shard انجام میدهد کاهش مییابد (به دلیل پخش شدن پردازشها بین shard ها)، در نتیجه سرعت دسترسی به دادهها افزایش مییابد.
- همچنین با افزایش تعداد shard ها حجم دادهی قابل ذخیره نیز افزایش مییابد.
مونگودیبی دادهها را در سطح مجموعه پخش میکند. به این معنی که دادههای یک مجموعه را در بین node ها و shard ها پخش میشود. مونگودیبی برای مدیرت نحوه پخش شدن دادهها از shard key استفاده میکند. shard key یه کلید ساده و یا یک کلید ترکیبی است که در همه سندها وجود دارد. عموما id_ میتواند به عنوان یک shard key استفاده شود.
مونگودیبی برای پخش دادهها از دو نوع shard key استفاده میکند. range based partitioning و hash based partitioning.
برای مطالعه: داکر چیست؟
- Range Based Sharding: در این روش دادهها را به تریبت shard key در دستههایی به نام chunk ذخیره میکند. در نتیجه دادههای با shard key نزدیک به هم در یک chunk ذخیره خواهند شد.مزیت این روش سرعت بالای جستجو در مواقعی است که بر اساس کلید جستجو میکنیم. و مشکل بارز آن پخش نشدن درست دادهها در chunk هاست. از آنجا که عموما دادهها به ترتیب کلید در دیتابیس ذخیره میشوند و از آنجا که دادههای ورودی به دیتابیس کلید ترتیبی دارند همه دادهها در یک سری chunk ذخیره خواهند شد.
- Hash Based Sharding: در این روش مونگو از فیلدها یک هش تولید میکند سپس با استفاده از این هشها دیتا را در chunk ها پخش میکند. از آنجا که هش تولید شده از کلید ها کاملا متفاوت از کلید است در نتیجه دو سند با کلید برابر ممکن است در دو chunk کاملا متفاوت قرار داشته باشد.
در این روش بر خلاف روش Range Based Sharding دادهها کاملا در chunk ها پخش میشوند و در نتیجه فشار پردازش روی یک node نخواهد بود. از معایب این روش این است که بر خلاف روش Range Based Sharding جستجو سریع بر روی دادههای یک رنج آسان نیست.
برای مطالعه: آموزش نصب MongoDB