مانگو دیبی (MongoDB) یک سیستم مدیریت پایگاهدادهی رایگان و اپنسورس است که از یک ساختار سندگرا استفاده میکند، این سیستم انواع مختلفی از داده را پشتیبانی میکند و یکی از انواع بیشمار تکنولوژی پایگاه دادهی غیر رابطهای (non-relational) به حساب میآید که در اواسط دههی ۲۰۰۰ تحت عنوان NoSQL پدید آمد.
هدف این بود که از این سیستم در اپلیکیشنهای مرتبط با دادهها و سایر کارهای پردازشی که با اطلاعات سروکار داشتند و مدلهای رابطهای ثابت پاسخگوی آنها نبودند، استفاده شود، MongoDB به جای اینکه همچون پایگاههای دادهی رابطهای از جداول و ردیفها استفاده کند، در طراحی خود از مجموعهها و اسناد بهره برده است.
نحوهی کار مانگو دیبی
رکورد موجود در MongoDB به صورت سند است، ساختار این سند حاوی دادههایی است که از دو قسمت field و value تشکیل شدهاند، اسناد مانگو دیبی مشابه با ساختار JSON در جاوا اسکریپت هستند، اما از متغیری با نام Binary JSON استفاده میکند که آن را BSON مینامند و بدین ترتیب دیتابیس مانگو با استفاده از آن میتواند با انواع بیشتری از دادهها تطبیق پیدا کند.
فیلدهای موجود در اسناد، به ستونهای موجود در پایگاه دادهی رابطهای وابسته هستند، مقادیر موجود در این اسناد نیز میتوانند به همان اندازه که انواع داده وجود دارد، متفاوت باشند که طبق راهنمای مانگو دیبی میتوانند شامل اسناد دیگر، آرایه و اسناد آرایهای باشد، شما میتوانید نمونهای از ساختار دستور insert در پایگاهدادهی مانگو را در قطعهکد زیر مشاهده کنید:
db.mycol.insert ( { title: 'MongoDB Tutorial', description: 'MongoDB is a NoSQL database', by: 'Hamyarit', url: 'https://www.hamyarit.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 } )
اسناد که باید به عنوان یک شناساگر خاص کلید اولیه را در مانگو دیبی تشکیل دهند، واحد پایه در MongoDB به حساب میآیند، مجموعهها شامل گروهی از اسناد و عملیات هستند که معادل جداول موجود در پایگاههای دادهی رابطهای میباشند، مجموعهها میتوانند حاوی هر نوع اطلاعاتی باشند اما محدودیتی که وجود دارد این است که دادههای موجود در یک مجموعه نمیتوانند در پایگاههای دادهی مختلف منتشر شوند.
فرمت تبادل داده و ذخیرهی اسناد BSON که در مانگو دیبی مورد استفاده قرار گرفته است یک شمای دو وجهی از اسنادی که شبیه به JSON هستند ارائه میدهد.
اشتراک گذاری خودکار، ویژگی کلیدی دیگری است که دادههای موجود در مجموعهی MongoDB را به پراکنده شدن در چندین سیستم قادر میسازد، بدین جهت مقیاسپذیری افقی در سیستم پدید میآید و حجم اطلاعات پراکنده میشود و همچنین ظرفیت پذیرش داده افزایش مییابد.
مقیاسپذیری (Scalability) به این معناست که در صورت افزایش حجم اطلاعات میتوان دادهها را در کامپیوترهای مختلفی پخش کرد، تا بار پردازشی سیستم کاهش یافته و امکان پردازش حجم عظیمی از دادهها توسط دیتابیس فراهم گردد.
مزایا و معایب مانگو دیبی
مانگو دیبی همچون سایر پایگاههای دادهی NoSQL به مدلهای از پیش تعریف شده نیاز ندارد و هرگونه از اطلاعات را ذخیره میکند، این کار به کاربران انعطاف لازم جهت ساخت هر تعداد از فیلد در یک سند را میدهد و در نتیجه سنجش پایگاههای دادهی MongoDB در مقایسه با پایگاههای دادهی ارتباطی آسانتر است.
یکی از مزایای استفاده از اسناد این است که این اجزا با استفاده از چندین زبان برنامهنویسی، انواع دادههای اصلی را ترسیم میکنند، همچنین داشتن این اسناد که درون پایگاه داده قرار دارند، نیاز برای اتصال پایگاههای داده را کاهش میدهد که میتواند به کاهش هزینه بینجامد.
همانطور که پیشتر هم گفتیم ویژگی اصلی MongoDB این است که توانایی مقیاسپذیری افقی دارد، این ویژگی، مانگو دیبی را به یک پایگاه دادهی مفید برای کمپانیهایی که اپلیکیشنهای مرتبط با دادههای بزرگ را راه اندازی میکنند، تبدیل میکند.
اگرچه مزایای مانگو دیبی بسیارند اما معایبی نیز وجود دارند، از آنجایی که MongoDB دارای استراتژی FailOver است، یک کاربر تنها یک گرهی اصلی را در خوشهی مانگو دیبی نصب میکند، اگر گرهی اصلی خوب کار نکند، گرهی فرعی به طور خودکار جایگزین گرهی اصلی میشود.
این تغییر وضعیت، تداوم و پایداری برنامه را تضمین میکند اما به صورت آنی صورت نمیگیرد و ممکن است صورت گرفتن آن تا یک دقیقه به طول بینجامد، در مقابل پایگاهدادههای Cassandra NoSQL از چندین گره اصلی پشتیبانی میکند تا در صورتی که یکی از آنها به خوبی کار نکرد، گرهی دیگر به جای آن وارد عمل شود تا یک زیرساخت با قابلیت دسترسی بالا برای پایگاه داده موجود باشد.
گره اصلی مانگو دیبی همچنین سرعت نوشته شدن داده بر روی پایگاه داده را محدود میکند، نوشتن داده باید بر روی گره اصلی ثبت شود و نوشته شدن اطلاعات جدید بر روی پایگاه داده با توجه به ظرفیت این موضوع، گره اصلی محدود میشود.
مشکل دیگری که ممکن است رخ دهد این است که احراز هویت کاربر به صورت پیشفرض در پایگاهدادهی MongoDB مهیا نشده است که البته این موضوع سبب محبوبیت این تکنولوژی در میان توسعه دهندگان شده، با این حال هکرهای زیرک بسیاری سیستمهای غیرایمن مانگو دیبی را از طریق حملات باج گیرانه مورد هدف قرار دادهاند، این موضوع سبب شده است تا بخشی به تنظیمات پیشفرض اضافه شود تا در صورتی که کسی به جز ادمین پایگاهداده به شبکهها دسترسی پیدا کرد، دسترسی او قطع شود.
پلتفرمهای موجود برای مانگو دیبی
پایگاهدادهی مانگو در نسخههای عادی و تجاری موجود است، نسخهی عادی مانگو دیبی به صورت رایگان و اپنسورس منتشر شده و به راحتی توسط همه قابل استفاده است، در صورتی که نسخهی MongoDB Enterprise Server، دارای امکانات امنیتی اضافه، موتور حافظهی داخلی، امکانات اجرایی و احراز هویت و همچنین قابلیتهای بررسی است که از طریق سیستمعاملهای مدیریتی پشتیبانی میشود و برای تهیهی آن باید مبلغی را بپردازید.
رابط گرافیکی کاربر (GUI) که در مانگو دیبی با نام Compass شناخته میشود، به کاربران امکان کار با ساختار اسناد، جستجو، مرتب کردن دادهها و… را میدهد، رابط مانگو دیبی که مخصوص هوش تجاری است، به کاربران این امکان را میدهد که به پایگاه دادهی NoSQL متصل شده تا بتوانند به ابزار هوش تجاری خود دست یافته و از این طریق، دادهها را تجسم کرده و با استفاده از کوئریهای SQL به تولید گزارش بپردازند.
کمپانی پشتیبان مانگو دیبی در سال ۲۰۱۶ یک پایگاه دادهی ابری را به عنوان یکی از خدمات خود تحت عنوان MongoDB Atlas منتشر کرد، این سرویس در AWS آمازون، سرویس ابری مایکروسافت (Microsoft Azure) و پلتفرم ابری گوگل قابل اجرا است.
همچنین این کمپانی در نسخهی MongoDB 4.0 که در سال ۲۰۱۸ منتشر شد، بخشی را به پشتیبانی از تبادلات چند سندی ACID اختصاص داد، همانطور که میدانید ACID از سرواژهی عبارات Atomicity, Consistency, Isolation, Durability تشکیل شده است. همخوانی ACID با اسناد متعدد، سبب گسترش میزان تبادلات مختلفی میشود که مانگو دیبی میتواند آنها را به درستی و با اطمینان مدیریت کند.
آیا شما نیز تا بهحال در پروژههای خود از پایگاهدادههای NoSQL استفاده کردهاید؟ چه تجربهای در خصوص این نوع از دیتابیسها دارید؟ دیدگاهها و تجربیات خود را با ما و سایر کاربران همیار آیتی به اشتراک بگذارید.