برنامه‌نویسی

MongoDB چیست؟


۲۷ تیر ۱۳۹۹
MongoDB چیست؟

MongoDB معروف‌ترین دیتابیس NoSQL است که متن‌باز و براساس داکیومنت‌ (document-oriented) است. NoSQL به این معنا است که این دیتابیس، از نوع دیتابیس‌های غیر رابطه‌ای (non-relational) است. به عبارتی ساختار MongoDB همانند دیتابیس‌هایی که ساختارشان براساس جداول رابطه‌ای است، ایجاد نشده است، اما روش‌های کاملا متفاوتی برای ذخیره‌سازی و بازیابی دیتا فراهم می‌کند. این فرمت ذخیره‌سازی، BSON نام دارد (همانند فرمت JSON).

در زیر مثالی از ساختار یک داکیومنت ذخیره‌شده در MongoDB را مشاهده می‌کنید:

{
  title: 'Geeksforgeeks',
  by: 'Harshit Gupta',
  url: 'https://www.geeksforgeeks.org',
  type: 'NoSQL'
} 

دیتابیس‌های براساس SQL، داده‌ها را در قالب جداول ذخیره می‌کند. این داده‌ها را در مدل‌های از پیش تعریف شده ذخیره می‌کند که برای برنامه‌های در حال رشد امروزی، مناسب نیستند. برنامه‌های مدرن و امروزی، بیش از هر زمانی شبکه‌ای و تعاملی هستند. این برنامه‌ها روز به روز دیتا‌های بیشتری را ذخیره می‌کنند، در عین حال نیاز دارند تا به دیتاهای بیشتری دسترسی پیدا کنند.

سیستم مدیریت دیتابیس‌های رابطه (Relational Database Management System و یا RDBMS) گزینه مناسبی برای کار با big data، با توجه به طراحی آن‌ها و عدم مقیاس‌پذیری از نظر افقی (افزودن سرور‌های بیشتر)، نیست. اگر دیتابیس بر روی یک سرور اجرا شود، به محدودیت در افزایش مقیاس برخورد خواهد کرد. دیتابیس‌های NoSQL مقیاس‌پذیرتر هستند و کارایی و عملکرد بهتری را فراهم می‌کنند. MongoDB از دیتابیس‌های NoSQL است که می‌توان با افزودن سرور‌های بیشتر، آن را گسترش داد، همچنین کارآمدی و بهره‌وری، با توجه به ساختار براساس داکیومنت، افزایش می‌یابد.

تفاوت MongoDB و RDBMS

  • RDBMS یک اسکیما (schema) یا طرح پایه معمولی دارد که تعداد جداول و رابطه میان آن‌ها را نمایش می‌دهد، درحالی که MongoDB براساس داکیومنت است. در واقع در آن هیچ مفهومی تحت عنوان طرح پایه و یا رابطه وجود ندارد.
  • تراکنش‌های پیچیده در MongoDB پشتیبانی نمی‌شود، زیرا عملیات‌های join پیچیده دردسترس نیستند.
  • MongoDB اجازه ایجاد ساختار‌های پیچیده و مقیاس‌پذیر براساس داکیومنت را می‌دهد. برای مثال، یک داکیومنت در یک کالکشن (collection) می‌تواند ۲ فیلد داده داشته باشد، درحالی که داکیومنت دیگر در همان کالکشن می‌تواند ۴ فیلد داده داشته باشد.
  • MongoDB به دلیل تکنیک‌های موجود در ذخیره‌سازی و ایندکس‌کردن موثر، در مقابل RDBMS سریع‌تر است.
  • یک سری مباحث وجود دارد که در هر دو دیتابیس مطرح است. چیزی که در RDBMS جدول نام دارد، در MongoDB تحت عنوان Collection شناخته می‌شود. به طور مشابه، یک tuple یک داکیومنت و ستون برابر فیلد است. MongoDB فیلد _id (اگر جداگانه تعریف نشده باشد) را به صورت پیشفرض، برای داکیومنت‌ها ایجاد می‌کند، این فیلد ۱۲ بایت هگزادسیمال است که یکتا‌بودن یک داکیومنت را تضمین می‌کند. این فیلد همانند کلید اصلی در RDBMS است.

قابلیت‌های MongoDB

  • Document Oriented: در MongoDB داده اصلی و کلی را در کمترین تعداد داکیومنت ذخیره می‌کند، نه مثل RDBMS که آن را به چندین ساختار رابطه‌ای تبدیل می‌کند. برای مثال، تمامی اطلاعات در رابطه با یک کامپیوتر را در یک داکیومنت، در کالکشنی با نام Computer ذخیره می‌کند و برای هر بخش به طور جداگانه، یعنی CPU، RAM، HARD DISK و … ساختار رابطه‌ای ایجاد نمی‌کند.
  • Indexing: بدون این قابلیت، دیتابیس برای اجرای هر کوئری مجبور است که هر داکیومنت در کالکشن را اسکن کند تا داکیومنت هماهنگ با کوئری را پیدا کند، که این شیوه خیلی کند است. بنابراین برای یک جست‌وجوی موثر و کارآمد، این ویژگی بهترین قابلیت است و MongoDB از آن برای پردازش حجم زیادی از دیتا در کمترین زمان استفاده می‌کند.
  • Scalability: می‌توان MongoDB را به صورت افقی (افزودن سرور‌های بیشتر)، توسط sharding (پارتیشن‌بندی و تقسیم دیتا میان چندین سرور) گسترش داد. یک داده بسیار بزرگ به بخش‌های کوچک‌تر، توسط shard key، تقسیم می‌شود، حتی این بخش‌های کوچک داده نیز میان سرور‌های مختلف پخش می‌شوند. در ضمن می‌توان به یک دیتابیسی که در حال استفاده است، سرورهای بیشتری اضاف کرد.
  • Replication and High Availability: دسترسی‌پذیری داده‌ها در MongoDB با ایجاد چندین کپی در سرورهای مختلف تضمین می‌شود. با ایجاد افزونگی داده‌ها، MongoDB از دیتابیس در مقابل خرابی سخت‌افزاری، محافظت می‌کند. اگر یک سرور دچار مشکل شود، داده‌ها را می‌توان از سرور‌های فعال، که کپی‌ای از داده در آن‌ها وجود دارد، به دست آورد و یا به عبارتی داده‌های از دست رفته را بازگردانی کرد.
  • Aggregation: عملیا‌های تجمیع و یا تراکم داده‌ها، رکورد‌های داده‌ها را پردازش می‌کنند و نتایج محاسبه شده‌ای را ارائه می‌کنند. همانند عبارت GROUPBY در SQL. برخی دیگر از اینگونه عبارت‌ها: sum، avg، min، max و …

چه زمانی از MongoDB استفاده کنیم؟

استفاده از MongoDB در موارد زیر، نسبت به RDBMS بهتر و مناسب‌تر است:

  • Big Data: اگر حجم زیادی از داده‌هایی را در اختیار دارید که می‌خواهید آن‌ها را در جداول ذخیره کنید، قبل از دیتابیس‌های RDBMS به MongoDB فکر کنید. MongoDB قابلیت‌ها و راه‌حل‌هایی برای پارتیشن‌بندی یا تقسیم داده‌ها و shardکردن دیتابیس‌تان ارائه می‌کند.
  • Unstable Schema: اضافه‌کردن یک ستون جدید در دیتابیس‌های RDBMS، بسیار سخت است و نیاز است تا اسکیما دیتابیس را تغییر دهید، درحالی که MongoDB به اسکیما وابسته نیست. اضافه‌کردن فیلد جدید، بر داکیومنت‌های قدیمی اثری نمی‌گذارد و در عین حال بسیار آسان است.
  • Distributed data: از آنجایی که چندین کپی از داده‌ها در سرور‌های مختلف ذخیره شده است، به هنگام خرابی سخت‌افزاری، بازگردانی و ریکاوری داده‌ها بسیار سریع و امن خواهد بود.

پشتیبانی MongoDB از زبان‌های مختلف

در حال حاضر MongoDB با ارائه درایور رسمی برای زبان‌های زیر، از آن‌ها پشتیبانی می‌کند:

  • C
  • C++
  • C#
  • Java
  • NodeJS
  • Perl
  • PHP
  • Python
  • Ruby
  • Scala
  • Go
  • Erlan

نصب MongoDB

تنها نیاز دارید که به صفحه دانلود MongoDB مراجعه کنید و سیستم‌عامل‌تان را از میان ویندوز، لینوکس، Mac OS X و یا Solaris انتخاب کنید. اطلاعات بیشتر به همراه جزئیات نصب، در وبسایت MongoDB ارائه شده است.

برای ویندوز‌های 64 بیتی، گزینه‌های کم‌تری وجود دارد. اگز از ویندوز 7 یا 8 و نسخه‌های جدیدتر استفاده می‌کنید، Windows 64-bit 2008 R2+ را انتخاب کنید. اگر از ویندوز XP و یا ویستا استفاده می‌کنید، پس Windows 64-bit 2008 R2+ legacy را انتخاب کنید.

چه کسانی از MongoDB استفاده می‌کنند؟

MongoDB توسط وبسایت‌ها و سرویس‌دهنده‌هایی نظیر EA، Cisco، Shutterfly، Adobe، Ericsson، Ericsson، eBay و Foursquare استفاده شده است.

منبع: https://www.geeksforgeeks.org/mongodb-an-introduction