mongoDB (مونگودیبی) یک Document-oriented database (پایگاه داده سند-گرا) است. و در گروه پایگاههای داده NOSQL قرار دارد.دراین نوع پایگاه داده جدول و رکورد وجود ندارد و از collection (مجموعه) و سند استفاده میشود. میتوان گفت مجموعه شبیه به جدول و سند شبیه به رکورد در پایگاه داده رابطهای است.
MongoDB در سال 2007 توسط شرکت 10gen شروع به توسعه شد و در مارس 2010 اولین نسخه آن منتشر شد. این پایگاه داده در واقع به جای ذخیره داده جدول همانند پایگاه های داده ای رابطه ای یا کلاسیک، داده ها را با ساختار JSON و بدون اسکیمای خاصی (Schema) ذخیره میکند. این پایگاه داده در حال حاضر توسط شرکت هایی همچون MTV Networks, Craigslist, Foursquare, UIDAI Aadhaar در حال استفاده است. این پایگاه داده در حال حاضر برای سیستم عامل های ویندوز، مکینتاش، لینوکس و سولاریس توسعه داده شده است.
در این پایگاه داده، دادهها ساختار ثابت ندارند و هر دو سند (شبیه رکورد در پایگاه رابطهای) میتواند ساختار کاملا متفاوت داشته باشد، به این نوع ساختار 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": "9144124842"
},
"phoneNumber":[
{
"type" : "Home",
"number": "58795555"
},
{
"type" : "work",
"number": "04132865105"
}
]
}
از مزیتهای پایگاه داده مونگودیبی نسبت سایر پایگاههای داده رابطهای (مانند MySQL) امکان پردازش و جستجو در حجم بسیار بالاتری از دادهها در لحظه و همچنین امکان دخیره حجم بالاتری از دادهها است.
سرعت پردازش بالاتر: پایگاه داده رابطهای در هر جستجو و یا در هر ذخیره داده باید شروط زیادی مانند روابط بین جدولها و صحت مقادیر رکوردها را بررسی کند که این پروسهها سربار RAM و CPU را به شدت افزایش میدهد در حالیکه مونگودیبی به دلیل ساختار NOSQL تنها دخیره و جستجو میکند و در نتیجه سرعت دستیابی و ذخیره دادهها به شدت کاهش مییابد.
دخیره حجم بالاتر دیتا: پایگاههای داده به دو شکل میتواند حجم دادههای قابل ذخیره در سیستم را افزایش دهند. horizontal-scaling و vertical-scaling.
1- vertical scaling : در این روش دیتاها روی یک node ذخیره میشود و برای افزاش حجم دادهها RAM و CPU یا Hard Disk (هارد) را افزایش میدهیم. از جمله پایگاه دادهای که از این روش استفاده میکنند میتوان MySQL را نام برد.
2- horizontal-scaling : در این روش داده در روی nodeهای متفاوت پخش، و هر قسمت از دادهها در یک سرور دخیره میشود، بدین ترتیب بار پردازش روی سرورهای متفاوت پخش خواهد شد و سرعت درسترسی به دادهها و حجم دادههای قابل ذخیره افزایش خواهد یافت. دیتابیسهایی که از این روش استفاده میکنند مونگودیبی و casanndra را میتوان نام برد.
همانطور که در بالا گفتیم در مونگودیبی میتوان با استاده از horizontal-scaling که shard نامیده میشود حجم داده قابل ذخیره و همچین سرعت دسترسی به داده را افزایش داد.
مزیتهای استفاده از shard:
با گسترش کلاستر تعداد پردازشهایی که هر shard انجام میدهد کاهش مییابد (به دلیل پخش شدن پردازشها بین shardها)، در نتیجه سرعت دسترسی به دادهها افزایش مییابد.
همچنین با افزایش تعداد shardها حجم دادهی قابل ذخیره نیز افزایش مییابد.
مونگودیبی دادهها را در سطح مجموعه پخش میکند. به این معنی که دادههای یک مجموعه را در بین nodeها و shardها پخش میشود. مونگودیبی برای مدیرت نحوه پخش شدن دادهها از shard key استفاده میکند. shard key یه کلید ساده و یا یک کلید ترکیبی است که در همه سندها وجود دارد. عموما id_ میتواند به عنوان یک shard key استفاده شود.
مونگودیبی برای پخش دادهها از دو نوع shard key استفاده میکند. range based partitioning و hash based partitioning.
1- Range Based Sharding: در این روش دادهها را به تریبت shard key در دستههایی به نام chunk دخیره میکند. در نتیجه دادههای با shard key نزدیک به هم در یک chunk دخیره خواهند شد.مزیت این روش سرعت بالای جستجو در مواقعی است که بر اساس کلید جستجو میکنیم. و مشکل بارز آن پخش نشدن درست دادهها در chunk هاست. از آنجا که عموما دادهها به ترتیب کلید در دیتابیس دخیره میشوند و از آنجا که دادههای ورودی به دیتابیس کلید ترتیبی دارند همه دادهها در یک سری chunk دخیره خواهند شد.
2- Hash Based Sharding: در این روش مونگو از فیلدها یک هش تولید میکند سپس با استفاده از این هشها دیتا را در chunk ها پخش میکند. از آنجا که هش تولید شده از کیلدها کاملا متفاوت از کلید است در نتیجه دو سند با کلید برابر ممکن است در دو chunk کاملا متفاوت قرار داشته باشد.
در این روش بر خلاف روش Range Based Sharding دادهها کاملا در chunkها پخش میشوند و در نتیجه فشار پردازش روی یک node نخواهد بود. از معایب این روش این است که بر خلاف روش Range Based Sharding جستجو سریع بروی دادههای یک رنج آسان نیست.
دیدگاهها