mongo dB چیست؟هر آنچه درباره mongo dB باید دانست | تولک

mongo dB چیست؟هر آنچه درباره mongo dB باید دانست

3
  • mahsa yazdani
  • 0
  • 2 فروردین 1399
mongo dB چیست؟هر آنچه درباره mongo dB باید دانست

هر آنچه درباره mongo dB باید دانست؟

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

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

وقتی با بانک اطلاعاتی مانند دیتابیس mongo dB  طرف هستیم، حجم اطلاعات بالا به معنای چیزی بیش از صدها هزار یا میلیون‌ها خط داده یا دیتا است. یا اگر در مقیاس حجم حافظه حساب کنیم، چندین گیگابایت تا چندین ترابایت از اطلاعات را شامل می‌شود. بدیهی است که وقتی حجم داده، بیش از ظرفیت حافظه رم سیستم است، بایستی به دنبال استراتژی دیگری نسبت به SQL برای ذخیره و پردازش داده بود.

از عمده دلایلی که استفاده از پایگاه داده غیر SQL را در اولویت قرار می‌دهد، حجم داده است. علاوه بر حجم، سرعت تغییرات ساختار داده نیز تاثیر بسیار مهمی دارد. امروزه، بیشتر پروژه‌های نرم افزاری به سورت چابک (agile) توسعه میابند.

بنابراین، ممکن است تغییر ساختار اطلاعاتی در برنامه‌ها، روزی چند مرتبه اتفاق بیافتد. در چنین شرایطی، ویرایش و مدیریت بانک‌های داده بر پایه SQL بسیار دشوار و زمان‌بر است. اما معماری و ابزاری چون پایگاه داده mongo dB این شرایط را بسیار سهل‌تر و سریع‌تر می‌کند.

با توجه به موارد گفته شده به بیان انتظاراتی که از یک پایگاه داده غیر SQL وجود دارد، می‌پردازیم  و بررسی می‌کنیم دیتابیس mongo dB، چگونه عملکردی دارد.

نحوه ذخیره در دیتابیس مونگو دی بی

یکی از مسئولیت‌های مهم نرم افزارهای مدیریت پایگاه داده، مدیریت فایل(ها) مربوط به Database است. این وظیفه ایجاب می‌کند تا اینکه چه داده‌ای در چه فایلی، به چه شکلی و کجای فایل نوشته شده است جزو دغدغه‌ها و منطق برنامه اصلی نباشد.

پایگاه داده mongo dB این داده‌ها را با فرمت BSON ذخیره می‌کند. این فرمت، نوشتن اطلاعات به همان روش مرسوم و محبوب JSON است که به صورت BINARY کدگذاری و ذخیره شده است. در کنار documentهایی که دیتابیس مونگو دی بی، به صورت BSON کدگزاری کرده، می‌داند هر کلید که نماینده سند است، کجای یک فایل بزرگ قرار دارد.

فرمت JSON این برتری را دارد که برای تبدیل دوباره به ساختارهای برنامه بسیار منعطف است. داده‌ای که به صورت JSON ذخیره می‌شود، در آینده به راحتی ویرایش می‌شود. به این معنی که هم ساختار می‌تواند تغییر کند و هم حجم داده‌ها.

در بانک اطلاعات SQL، تغییر ساختار یا حجم اطلاعات نیاز به بازنویسی کل جدول توسط برنامه مدیریت بانک اطلاعات دارد و دستور این کار یک عملیات جدا محسوب و این کار توسط ادمین یا برنامه نویس انجام می‌شود.

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

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

پایگاه داده mongo dB سورس بازاست!

Mongo dB یک نرم‌افزار سورس باز است. open source بودن یک ابزار پایه باعث می‌شود، قابل اعتمادتر باشد. از آنجا که mongo dB دارای این خصوصیت است، باعث شده سازمان‌های زیادی از آن استفاده کنند. برای درک بهتر این خصوصیت، بهتر است درباره مزیت‌های نرم افزارهای سورس باز رجوع کنید.

مدل دیتابیس مونگو دی بی

وقتی صحبت از پایگاه داده NoSQL می‌شود، به این معنی است که دیتابیس فقط بر پایه SQL یا ساختار رابطه‌ای نیست. بنابراین، در پایگاه داده mongo dB، بر خلاف SQL که داده در جدول‌ها ذخیره می‌شود، می‌توان مدل‌های داده‌ای مانند key-value pairs و یا فرمت‌های گراف در آن ذخیره کرد. سرعت دسترسی به داده در مدل key-value بسیار بالا است. در این مدل، تعداد documentها و حجم داده تاثیری بر سرعت پیدا کردن اطلاعات ندارد.

امکانات پایگاه داده mongo dB

  • Ad-hoc Queries

Ad-hoc Queries فرمان‌هایی است که به mongo dB داده می‌شود تا بر روی Database یا Document اعمال کند. در مجموع mongo dB از عملیات کمی برخوردار است که شامل موارد زیر می‌باشد:

C – Create/Insert

R – Read /Query

U – Update

D – Delete

تمام آنچه برای مدیریت و خواندن یک  database نیاز است با این عملیات امکان‌پذیر می‌شود. برای اجرای این عملیات دستوراتی وجود دارد که توضیحات و مثال‌های فراوانی برای آنها هست.

  • دیتابیس غیرشماتیک

دیتابیس مونگو دی بی، دخالتی در شماتیک اطلاعات ندارد و به هر نوعی خواسته شود، اطلاعات را می‌خواند یا ذخیره می‌کند.

در mongo dB مفهومی به نام collection وجود دارد که تمام documentها به آن نسبت داده می‌شود. همچنین، هر document می‌تواند از اندازه و ساختار کاملا متفاوت تبعیت کند. بخشی از یک document می‌تواند یک فایل تصویری باشد و بخش دیگری از آن، اطلاعات مربوط به تصویر. به ظاهر مشابه آنچه که سیستم عامل‌ها در یک فولدر، فایل‌ها را ذخیره می‌کنند و آدرس فایل‌ها یا فولدر، همان کلید دسترسی به سند محسوب می‌شود.

  • فهرست‌بندی یا Indexing

فهرست‌بندی تاثیر بسیاری در افزایش سرعت پیدا کردن و خواندن اطلاعات بسیار مهم دارد. بنابراین، در پایگاه داده mongo dB می‌توان درخواست‌های پرتکرار را فهرست بندی کرد.

همچنین، خود mongo dB به طور خودکار، جستجوهای تکراری را فهرست‌بندی می‌کند و بخشی از این کار را به عهده می‌گیرید.

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


Db.collection_name.createIndex( <key and index type specification>, <options>)

در مثال زیر، فیلد name در فهرست ثبت شد. در صورتی که فهرستی با همین نام وجود نداشته باشد، در پاسخ، کلید ok با مقدار 1 پاسخ داده خواهد شد.


> db.dataflair1.createIndex({name:1})
{
“createdCollectionAutomatically” : false,
“numIndexesBefore” : 1,
“numIndexesAfter” : 2,
“ok” : 1
}
>

 

مثالی که بیان شد نوع ساده فهرست بندی در mongo dB است، فهرست‌های پیچیده‌تری نیز وجود دارد که می‌توان برای آشنایی با آنها به مستندات آموزش mongo dB رجوع کرد.

  • Replication/رونوشت

یکی از مزیت‌های بزرگ پایگاه داده mongo dB، ایجاد رونوشت و توزیع اطلاعات است. mongo dB می‌تواند اطلاعات را در بین چند ماشین مدیریت کند. در این شرایط، یکی از ماشین‌ها به عنوان node اصلی در نظر گرفته می‌شود و فرآیند ذخیره و تصمیم‌های دیگری توسط این node انجام می‌شود. اگر به هر دلیلی این node از دسترس خارج شود، node ثانوی دیگری به صورت خودکار به عنوان node اصلی قرار می‌گیرد. بدین صورت کارکرد منظم سیستم به صورت خودکار و بدون نیاز به مدیریت ادمین  سرور و اطلاعات، تامین می‌شود.

زمانی که تعداد درخواست سیستم یا حجم اطلاعات بیش از ظرفیت یک ماشین باشد، وظایف بین چند ماشین تقسیم می‌شود؛ ماشین‌هایی که بایستی از اطلاعات مشترک بهره‌مند باشند. ابزار Replication در mongo dB به گونه‌ای جذاب و شایسته این امکان را سیستم می‌بخشد.

  • Aggregation/تجمیع

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

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

از مزیت‌های بزرگ mongo dB این است که تجمیع داده را به طور بهینه به لحاظ تکرار، پردازش کرده و مطمئن به لحاظ مدیریت منابع، انجام می‌دهد.

  • GridFS یا جدول فایل سیستم

قابلیت GridFS ابزار مفیدی در پایگاه داده mongo dB برای ذخیره و دریافت اطلاعات است. این ابزار باعث می‌شود documentهای بالای 16MB در چند document کوچک‌تر ذخیره بشوند.

هر یک از این documentها به اندازه 256KB ذخیره می‌شود. به هر یک این سندهای خرد شده، chunk گفته می‌شود. وقتی document مورد نظر خوانده می‌شود، پایگاه داده mongo dB به صورت خودکار تمام chunkها را به هم وصل می‌کند و ارائه می‌دهد. این کار به بهینه بودن فرایند ثبت و خواندن اطلاعات کمک شایانی می‌کند.

  • Sharding/خرد کردن

زمانی که حجم یک collection بسیار بالا باشد، ثبت و جستجو در آن به مشکل می‌خورد. برای حل این شرایط مشکل‌ساز، mongo dB ابزار مفیدی به نام Sharding دارد که یک  collectionرا به قطعات کوچک‌تر تبدیل می‌کند.

هر یک از این قطعه‌ها یک Shard گفته می‌شود. یک Shard مانند یک نمونه کامل و مستقل mongo dB عمل می‌کند و می‌تواند در سیستم‌های متعدد توزیع شود و Replicate شود. هر یک از shardها که در ماشین مجزا توسط mongo dB عمل می‌کنند که به آنها cluster گفته می‌شود.

عکس زیر ساختار Sharding در mongo dB را نشان می‌دهد:

mongo dB چیست؟هر آنچه درباره mongo dB باید دانست

mongo dB چیست؟هر آنچه درباره mongo dB باید دانست

  • High Performance/ بهینه بودن

سرعت پاسخ به queryها در mongo dB آنقدر هست که می‌توان از آن برای نرم افزارهای real-time استفاده کرد. دلیل عمده این بهینه بودن، قابلیت indexing و sharding در دیتابیس مونگو دی بی است.

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

قابلیت indexing ایجاب می‌کند که جستجوی اطلاعات در حداقل قرار بگیرد و این موضوع حجم زیادی از پردازش و خواندن اطلاعات را کاهش می‌دهد.

تقسیم بندی فیزیکی و scale-out پیاده‌سازی سیستم‌های بزرگ در ابعاد جهانی را فراهم می‌کند. در مجموع پایگاه داده mongo dB ابزار بسیار خوبی برای این کار فراهم کرده و در مجموعه‌هایی که سیستم‌های scale-outشده نیاز دارند، از محبویت بالایی برخوردار است.

  • سیستم مدیریت Mongo dB یا MMS

پایگاه داده mongo dB از سیستم مدیریت قوی و پیشرفته‌ای برخوردار است که تمامی امکانات مورد نیاز برای مدیریت سیستم بانک اطلاعات را فراهم می‌کند.

این سیستم اطلاعات لحظه‌ای منابع سخت افزاری و خود Database ها را پردازش می‌دهد. همچنین، امکان تهیه Backup را نیز فراهم می‌کند.

این سیستم امکان ایجاد پیغام‌های سفارشی‌سازی‌شده را نیز فراهم می‌کند. این پیغام‌ها کمک می‌کنند تا پیش از آنکه وقایعی، اطلاعات را تحت تاثیر قرار دهد، از آنها مطلع شویم.

  • Load Balancing یا تقسیم بار

تمام ترافیک تقاضا به موتور mongo dB می‌تواند از ابزار Load Balancer آن عبور کند. بدین ترتیب mongo dB میزان بار بر روی تمام clusterها را نظارت می‌کند و تقاضا را به node که کمترین بار بر روی آن است، ارائه می‌دهد.

اگر به هر دلیلی یکی از ماشین‌ها متوقف شود، سیستم تقسیم بار وظایف آن ماشین را به ماشین یا node دیگر انتقال می‌دهد. بدین ترتیب، با داشتن یک سیستم بر پایه پایگاه داده mongo dB می‌توان از کارکرد یکپارچه و منظم سیستم اطمینان حاصل کرد.

محدودیت‌های دیتابیس مونگو دی بی

در کنار مزیت‌های زیادی که mongo dB دارد، محدودیت‌هایی نیز دارد. اینکه این محدودیت‌ها یک ضعف محسوب می‌شود یا نه گاهی بستگی به دیدگاه مخاطب دارد؛ چرا که تمامی این محدودیت‌ها بنا به دلایل فنی و تجربی به وجود آمده‌اند.

  • Mongo dB از Join پشتیبانی نمیکند

از آنجا که mongo dB بر پایه SQL نیست، نمی‌توان انتظار داشت از ترکیب داده‌ها پشتیبانی کند. برای تقاضای داده و پیوند دادن آنها با هم بایستی این کار را به صورت دستی در کدهای برنامه انجام داد.

  • مصرف بالای حافظه

از آنجا که mongo dB از پیوند داده پشتیبانی نمی‌کند، باعث می‌شود داده‌های تکراری در حافظه سیستم ذخیره شود. تمام کلیدهای مربوط به دیتابیس مونگو دی بی در رم سیستم ذخیره می‌شود. ممکن است کلید مربوط به یک document بارها در رم کپی شود.

  • محدودیت حجم داده

در پایگاه داده mongo dB حداکثر حجم هر document فقط 16 مگابایت می‌تواند باشد. محدود کردن حجم یک داده با هویت مستقل داده به بهینه‌شدن مدیریت داده کمک می‌کند. پیدا کردن آدرس داده بر اساس شمارش و سایز مشخص باعث می‌شود با کمترین محاسبه عملی شود.

  • محدودیت تودرتویی داده

در پایگاه داده mongo dB حداکثر عمق شاخه‌ها 100 مرحله است. البته 100 مرحله عمق محدودیت کمی نیست. تصور بر این است که یک ساختار سالم اطلاعات نیازی به بیش از این عمق ندارد. در صورتی که نیاز به بیش از این باشد، بایستی آن را به نحو دیگری تقسیم کرد یا حتی با افزونگی داده مواجه شد. بر اساس این قاعده مدیریت داده عملی‌تر و منظم‌تر است.

پایگاه داده mongo dB برای چه کسانی مناسب است؟

بر اساس مزیت‌ها و محدودیت‌هایی که از mongo dB گفته شد، می‌توان نتیجه‌گیری کرد آیا mongo dB انتخاب مناسبی برای پروژه هست یا نه؟ برای این انتخاب دو مسیر وجود دارد:

ابتدا اینکه آیا بانک اطلاعات بدون ساختار برای پروژه شما مناسب است یا خیر؟ سپس اگر تصمیم به این نوع پایگاه داده بود، بین ابزارهای دیگر آیا mongo dB انتخاب مناسبی است یا خیر؟

بنابراین، می‌توان اینگونه سنجید که دیتابیس مونگو دی بی برای شما مناسب است اگر:

  • پروژه به صورت چابک توسعه داده می‌شود.
  • حجم اطلاعات بالا است.
  • نیاز به سیستم بلادرنگ است.
  • نیاز است سیستم همیشه برقرار باشد و قطع نشود (100% uptime).
  • امکان تثبیت ساختار در پروژه وجود نداشته باشد (ساختار منعطف).
  • نیاز به سیستم توزیع‌پذیر باشد.
no avatar
mahsa yazdani
دانشجوی کارشناسی ارشد شبکه نویسنده ,گرافیست و علاقه مند به فضای وب فارسی