دیتابیس mongodb چیست؟
# mongodb چیست؟
MongoDB یک پایگاه داده NoSQL منبع باز است. NoSQL به عنوان جایگزینی برای پایگاه دادههای سنتی رابطهای استفاده میشود زیرا به جای استفاده از جداول و ردیف ها از مجموعه ها و اسناد استفاده می کند؛اسناد از جفت های کلید-مقدار تشکیل شده اند که واحد اصلی داده در MongoDB هستند و مجموعه ها شامل مجموعه ای از اسناد و تابع هستند که معادل جداول پایگاه داده رابطه ای است.
پایگاه های داده NoSQL ابزاری است که می تواند اطلاعات سند محور را مدیریت کند و برای کار با مجموعه های بزرگی از داده های توزیع شده بسیار مفید است.
MongoDB از اشکال مختلف داده پشتیبانی می کند و این یکی از فناوریهای پایگاه داده غیرمرتبطی است که در اواسط دهه 2000 تحت پرچم NoSQL به وجود آمد.
از آنجا که برنامههای کلان داده و سایر کارهای پردازشی که شامل دادههایی است که به خوبی با یک مدل رابطهای سفت و سخت مطابقت ندارند از معماری MongoDB استفاده میشود.
دیتابیس MongoDB توسط MongoDB.Inc تحت SSPL (مجوز عمومی سمت سرور) توسعه و مدیریت می شود و در ابتدا در فوریه 2009 منتشر شد. همچنین درایور رسمی پشتیبانی را برای همه زبان های محبوب مانند C، C++، C#، ، .Net، Go،Java، Node.js، Perl، PHP، Python، Motor، Ruby، Scala، Swift، Mongoid ارائه کرده.
امروزه شرکت های زیادی مانند فیس بوک، نوکیا، eBay، Adobe، Google و ... وجود دارند که از MongoDB برای ذخیره حجم زیادی از داده های خود استفاده می کنند.
# mongodb چطور کار میکند؟
همانطور که می دانیم MongoDB یک سرور پایگاه داده است و داده ها در این پایگاه داده ها ذخیره می شوند. یا به عبارتی محیط MongoDB به شما سروری می دهد که می توانید آن را راه اندازی کنید و سپس با استفاده از MongoDB چندین پایگاه داده روی آن ایجاد کنید.
به دلیل اینکه MongoDB یک پایگاه داده NoSQL میباشد، داده ها در مجموعه ها و اسناد ذخیره می شوند. از این رو پایگاه داده، مجموعه و اسناد به شکل زیر به یکدیگر مرتبط هستند:
همانطور که پایگاه داده MYSQL شامل جداول و سطر و ستون است پایگاه داده MongoDB شامل مجموعه هاست و همینطور شما مجاز به ایجاد چندین پایگاه داده و چندین مجموعه هستید.
در داخل مجموعه ها اسنادی داریم. این اسناد حاوی دادههایی هستند که ما میخواهیم داخل پایگاه داده MongoDB ذخیره کنیم و یک مجموعه میتواند حاوی چندین سند باشد و دیگر در اینجا schema در کار نیست، یعنی لازم نیست یک سند با سند دیگر مشابه باشد.
اسناد با استفاده از فیلدها ایجاد می شوند و فیلدها جفت های کلید-مقدار هستند، درست مانند ستون ها در پایگاه داده رابطه ای. مقدار فیلدها می تواند از هر نوع داده BSON مانند double، string، boolean و غیره باشد.
داده های ذخیره شده در MongoDB در قالب اسناد BSON هستند. در اینجا، BSON مخفف نمایش باینری اسناد JSON است. یا به عبارت دیگر، در backend، سرور MongoDB داده های JSON را به یک فرم باینری تبدیل می کند که به نام BSON شناخته می شود و میتواند خیلی بهتر ذخیره و پردازش شود.
در اسناد MongoDB، شما مجاز به ذخیره داده های تو در تو هستید و این قابلیت به شما این امکان را می دهد که روابط پیچیده ای بین داده ها ایجاد کنید و آنها را در یک سند ذخیره کنید که کار و واکشی داده ها را در مقایسه با SQL بسیار کارآمد می کند ولی در SQL، برای دریافت داده ها از جدول 1 و جدول 2، باید پیوندهای پیچیده ای بین ایندو بنویسید. لازم به ذکر است که حداکثر اندازه سند BSON، مقدار 16 مگابایت است.
توجه: در سرور MongoDB، شما مجاز به اجرای چندین پایگاه داده هستید. به عنوان مثال، ما یک پایگاه داده به نام Mongard داریم. در داخل این پایگاه دو مجموعه و در این مجموعه ها دو سند داریم. و در این اسناد ما داده های خود را به صورت فیلد ذخیره می کنیم. همانطور که در تصویر زیر نشان داده شده است:
مثال زیر نشان می دهد که چگونه یک سند را می توان در MongoDB مدل کرد:
1. فیلد _id توسط MongoDB برای شناسایی منحصر به فرد سند موجود در مجموعه اضافه شده است.
2. به طور مثال داده های یک سفارش (شناسه سفارش، محصول و مقدار) که در RDBMS معمولاً در یک جدول جداگانه ذخیره می شود، در MongoDB به عنوان یک سند جداگانه در خود مجموعه ذخیره می شود. این یکی از تفاوت های کلیدی در نحوه مدل سازی داده ها در MongoDB است.
# اجزای کلیدی معماری mongodb
در زیر تعدادی از اصطلاحات رایج مورد استفاده در MongoDB آورده شده است.
1. _id این فیلدی است که در هر سند MongoDB مورد نیاز است. فیلد _id یک مقدار منحصر به فرد در سند MongoDB را نشان می دهد؛ و این فیلد مانند کلید اصلی سند است. اگر یک سند جدید بدون فیلد _id ایجاد کنید، MongoDB به طور خودکار این فیلد را ایجاد می کند. برای مثال، اگر مثال جدول مشتری بالا را ببینیم، Mongo DB یک شناسه منحصر به فرد 24 رقمی را به هر سند در مجموعه اضافه می کند.
2. مجموعه - گروهی از اسناد MongoDB است. یک مجموعه معادل جدولی است که در هر RDMS دیگری مانند Oracle یا MS SQL ایجاد می شود.
3. مکان نما - یک اشاره گر به مجموعه ی یافته شده بر اساس کوئری هاست. کلاینت ها می توانند به وسیله پیمایش مکان نما برای بازیابی خروجی ها اقدام کنند.
4. پایگاه داده - این محفظه ای برای مجموعه ها است مانند RDMS که در آن محفظه ای برای جداول وجود دارد. هر پایگاه داده مجموعه ای از فایل های خود را در سیستم فایل دریافت می کند و یک سرور MongoDB می تواند چندین پایگاه داده را ذخیره کند.
5. سند - یک رکورد در مجموعه MongoDB اساسا یک سند نامیده می شود. سند به نوبه خود از فیلد نام و مقادیر تشکیل شده است.
6. فیلد - یک جفت نام-مقدار در یک سند. یک سند دارای صفر فیلد یا بیشتر است. فیلدها مشابه ستونها در پایگاههای داده رابطهای هستند. نمودار زیر نمونهای از فیلدها، با جفتِ مقدار کلید را نشان میدهد. بنابراین در مثال زیر CustomerID و 11 یکی از مقدار-کلید های تعریف شده در سند است.
7. JSON - به عنوان یکی از اشیاء جاوا اسکریپت شناخته می شود. این یک قالب متنی plain text ، قابل خواندن برای انسان و برای بیان داده های دارای ساختار است. JSON در حال حاضر در بسیاری از زبان های برنامه نویسی پشتیبانی می شود.
# ویژگیهای mongodb
1. پایگاه داده بدون Schema: این یک ویژگی عالی ارائه شده توسط MongoDB است. پایگاه داده بدون Schema به این معنی است که یک مجموعه می تواند انواع مختلفی از اسناد را در خود نگه دارد. یا به عبارت دیگر، در پایگاه داده MongoDB، یک مجموعه واحد می تواند چندین سند را در خود جای دهد و این اسناد ممکن است از تعداد فیلدها، محتوا و اندازه های مختلف تشکیل شوند. لازم نیست که مانند پایگاه داده های رابطه ای یک سند شبیه به سند دیگر باشد. با توجه به این ویژگی جالب، MongoDB انعطاف پذیری زیادی را برای پایگاه های داده فراهم می کند.
2. Document Oriented: در MongoDB، تمام داده ها به جای جداول مانند RDBMS در اسناد ذخیره می شوند. در این اسناد، دادهها به جای ردیفها و ستونها در فیلدها (جفت کلید-مقدار) ذخیره میشوند که دادهها را در مقایسه با RDBMS بسیار انعطافپذیرتر میکند و هر سند حاوی آبجکت آیدی منحصر به فرد خود است.
3. Indexing: در پایگاه داده MongoDB، هر فیلد در اسناد با شاخص های اولیه و ثانویه ایندکس می شود که این امر دریافت یا جستجوی داده ها از مجموعه داده ها را آسان تر می کند و زمان کمتری را می گیرد. اگر داده ها ایندکس نمی شدند، باید در پایگاه داده هر سند را با کوئری مشخص شده جستجو میکردیم که زمان زیادی می برد و کارآمد نیست.
4. مقیاس پذیری: MongoDB مقیاس پذیری طولی را با کمک شاردینگ فراهم می کند. Sharding به معنای توزیع داده ها در چندین سرور است، در اینجا مقدار زیادی از داده ها با استفاده از shard key به تکه های داده تقسیم می شوند و این تکه های داده به طور مساوی در بین shard هایی که در بسیاری از سرورهای فیزیکی قرار دارند توزیع می شوند و همچنین ماشین های جدیدی را به پایگاه داده در حال اجرا اضافه می کند.
5. همانند سازی: MongoDB دسترسی و افزونگی بالایی را با کمک همانند سازی فراهم می کند، به این صورت که چندین کپی از داده ها ایجاد می کند و این کپی ها را به سرور دیگری ارسال می کند تا در صورت خرابی یک سرور، داده ها از سرور دیگری بازیابی شوند.
6. تجمیع: امکان انجام عملیات بر روی داده های گروه بندی شده و دریافت یک نتیجه واحد یا نتیجه محاسبه شده را می دهد که این شبیه SQL GROUPBY است و شامل سه تجمیع مختلف میشود، یعنی تجمیع pipeline ، فانکشن map-reduce و متد های تجمیع single-purpose.
7. عملکرد بالا: عملکرد MongoDB به دلیل ویژگی هایی مانند مقیاس پذیری، indexing ، همانند سازی و ... در مقایسه با پایگاه داده دیگر بسیار بالاست و ماندگاری داده قابل قیاسی نسبت به سایر دیتابیس ها دارد.
# مزایای mongodb
- این یک پایگاه داده NoSQL بدون schema است. زمانی که با MongoDB کار می کنید نیازی به طراحی schema پایگاه داده ندارید.
- از عملیات join پشتیبانی نمی کند.
- انعطاف پذیری زیادی برای فیلدهای موجود در اسناد فراهم می کند.
- شامل داده های ناهمگن میشود.
- عملکرد بالا، دسترس پذیری و مقیاس پذیری را فراهم می کند.
- از Geospatial به طور موثر پشتیبانی می کند.
- این یک پایگاه داده سند گرا است و داده ها در اسناد BSON ذخیره می شوند.
- همچنین از ACID transactions پشتیبانی می کند.
- نیازی به وارد کردن SQL ندارد.
- به راحتی با Big Data Hadoop ادغام می شود.
# معایب mongodb
- از حافظه بالایی برای ذخیره سازی اطلاعات استفاده می کند.
- شما مجاز به ذخیره بیش از 16 مگابایت داده در اسناد نیستید.
- تودرتویی داده ها در BSON نیز محدود است، شما مجاز به تودرتو کردن داده ها تا بیش از 100 سطح نیستید