دیتابیس MongoDB یک دیتابیس Open-Source برای مقاصد کلی و متداول میباشد. برخلاف دیتابیسهای رابطهای که دادهها را در ردیفها و ستونها ذخیره میکنند، MongoDB از یک مدل دیتای سندی استفاده میکند و یک فرم باینری از اسناد JSON که BSON نام دارد را ذخیره میکند. اسناد حاوی یک یا چند فیلد هستند و هر فیلد حاوی یک مقدار از یک نوع داده خاصاز جمله دادههای Array و باینری است.
اجزای MongoDB
اسناد در مجموعهها و مجموعهها در دیتابیسها ذخیره میشوند. در مقایسه با دیتابیسهای رابطهای اسناد تقریبا همانند ردیفها، فیلدها مانند ستونها و مجموعهها مانند جدولها میباشند. در MongoDB هیچگونه طرح ثابتی وجود ندارد، بنابراین اسناد میتوانند ساختار متفاوتی داشته باشند و میتوانند به صورت پویا سازگار شوند. MongoDB پشتیبانی کامل از شاخصها (Index) از جمله شاخصهای ثانویه، ترکیبی و جغرافیایی را ارائه میکند.
MongoDB همچنین دارای یک زبان Query غنی، Modifierهای بروزرسانی اتمی، جستجوی متن، Aggregation Framework برای تحلیلهای مشابه عملیات SQL GROUP BY و MapReduce برای تجزیه و تحلیلهای پیچیده در محل میباشد. همسانسازی از پیش تعبیه شده همراه با Failover، در دسترسی پذیری بالا را فراهم کرده و Auto-Sharding نیز مقیاسپذیری افقی را برای پیادهسازیهای بزرگ امکانپذیر میسازد. MongoDB همچنین درایورهای Native و Idiomatic را برای تمامی زبانهای برنامهنویسی و Frameworkهای محبوب ارائه کرده تا توسعه ساده شود.
الیوت هوروویتز، مدیر طرحهای فنی و موسس MongoDB میگوید:« MongoDB در آزمایشگاه طراحی نشده است. ما MongoDB را از تجربیات خودمان با سیستمهای مقیاس وسیع، قوی و با دسترسی بالا ساختیم. ما از طراحی را ابتدا شروع نکردیم بلکه سعی کردیم بفهمیم چه چیزی اشتباه و مشکلدار است و آن را درست کردیم. بنابراین طوری که من MongoDB را درنظر میگیرم این است که اگر شما در MySQL نوع داده را از رابطهای به سندی تغییر دهید، ویژگیهای فوقالعادهای به دست خواهید آورد، از جمله : اسناد تعبیه شده برای سرعت، کنترلپذیری، توسعهی پذیری سریع با طرحهای پویا و مقیاسپذیری افقی آسانتر، زیرا اتصال دادهها آنقدر مهم نیستند.
بسیاری از موارد مانند شاخصها، Queryهای پویا و بروزرسانی در دیتابیسهای رابطهای به خوبی کار میکنند و ما چیز زیادی را در این موارد تغییر ندادهایم. به عنوان مثال، نحوه طراحی شاخصها در MongoDB باید دقیقا همانطور که در MySQL یا اوراکل دیده میشود، باشد. تغییر انجام پذیرفته در MongoDBاین است که میتوان از Index کردن یک فیلد تعبیه شده استفاده کرد.»MongoDB برای نحوه ساخت و اجرای برنامههای کاربردی با تکنیکهای توسعه مدرن، مدلهای برنامه نویسی، محاسبات منابع و اتوماسیون عملیاتی طراحی شده است.
نحوه ایجاد برنامههای مدرن با MongoDB
دیتابیسهای رابطهای در بسیاری از سازمانها موقعیتی تثبیت شده و سابقهای طولانی دارند. دیتابیسهای رابطهای برنامههای موجود که نیازهای تجاری فعلی را برآورده، حمایت و پشتیبانیمیکنند. آنها توسط یک اکوسیستم ابزاری وسیع پشتیبانی شده و افراد زیادی برای اجرا و حفظ این سیستمها واجد شرایط میباشند. اما سازمانها به دلیل چالشهایی که در ساخت برنامههای مدرن با آنها روبرو میشوند، به طور روزافزون در حال درنظر گرفتن جایگزین برای زیرساختهای رابطهای قدیمی میباشند.
- توسعه دهندگان در حال کار با برنامههایی میباشند که حجم زیادی از انواع دادههای جدید از جمله دادههای ساختار یافته، نیمه ساختار یافته، بدون ساختار و Polymorphic را با سرعت بالا تولید میکنند.
دورههای دوازده تا هجده ماهی توسعهی آبشاری (Waterfall Development) خیلی وقت است که دیگر اجرا نمیشوند. در حال حاضر تیمهای کوچک با سرعتهای بالا کار میکنند و هر یک یا دو هفته و در بعضی موارد حتی چند بار در هر روز کد جدید ارائه میکنند.
- برنامههای کاربردی که قبلا یک دسته مخاطب محدود داشتند اکنون به سرویسهایی که باید همیشه و از بسیاری از دستگاههای مختلف قابل دسترسی باشند و قابلیت خدمترسانی به میلیونها کاربر از سراسر جهان را داشته باشند تبدیل شده اند.
- سازمانها اکنون درحال رویآوردن به توسعه زیرساختی معماریها با استفاده از نرمافزارهای متنباز، Commodity serverها و محاسبات Cloud به جای استفاده از سرورهای یکپارچه بزرگ و زیرساختهای زخیرهسازی میباشند.
معماری Nexus
فلسفه طراحی MongoDB بر روی ترکیب قابلیتهای بحرانی دیتابیس رابطهای با نوآوریهای فناوری NoSQL تمرکز دارد. چشمانداز MongoDB این است که از سرانجام تلاشهایی که اوراکل و دیگران در طی 40 سال گذشته انجام دادهاند تا دیتابیس رابطهای برای رسیدن به چیزی که امروز هستند استفاده کنیم. MongoDBبه جای آنکه چند دهه بلوغ ثابت شده دیتابیس را دور بریزد، درحال ترکیب تواناییهای کلیدی دیتابیس رابطهای با محصول تلاشهایی که پیشگامان اینترنت برای پاسخگویی به نیازهای برنامههای مدرن انجام داده اند است.
دیتابیس رابطهای به طور قابل اعتمادی به برنامههای کاربردی برای سالهای زیادی خدمت کرده و ویژگیهایی را ارائه میدهند که امروزه برای توسعه دهندگان نسل بعدی برنامههای کاربردی حیاتی میباشند:
زبان Query رسا و بیانگر و شاخصهای ثانویه: کاربران باید بتوانند بر دادههای خود به طور پیچیده برای پشتیبانی از هر دو نوع برنامههای کاربردی عملیاتی و تحلیلی کنترل داشته باشند. شاخصها نقش مهمی در ارائه دسترسی به دادهها دارند به طوری که به جای نگهداری در کد برنامه، به صورت محلی توسط دیتابیس پشتیبانی میشوند.
- ثبات بالا: برنامههای کاربردی باید بتوانند بلافاصله آنچه که در دیتابیس نوشته شده است را بخوانند. ساخت برنامههای کاربردی حول یک مدل پایدار که قرار است در آینده به ثبات برسد، حتی برای پیشرفتهترین تیمهای مهندسی بسیار پیچیده و دشوار است و وظیفهی قابل توجهی را بر روی دوش توسعه دهندگان میگذارد.
- مدیریت پروژه و ادغام : دیتابیس فقط یک بخش از زیرساختهای کاربردی هستند و باید به طور یکپارچه در مجموعه IT جای بگیرند. سازمانها به دیتاسنتریدیتابیس نیاز دارند که قابل ایمنسازی، قابل نظارت، اتوماسیون شده باشدو با زیرساختهای فناوریها، فرایندها و کارکنان موجود از جمله تیمهای عملیاتی، DBAها و تحلیلگران داده ادغام شده باشند.
با این حال، برنامههای کاربردی مدرن الزاماتی را تحمیل میکنند که توسط دیتابیس رابطهای مورد استفاده قرار نمیگیرند و این امر انگیرهی ابرای توسعه پایگاههای NoSQL است:
- مدلهای انعطافپذیر داده: دیتابیس NoSQL برای رسیدگی به الزامات تحمیل شده توسط دادههای مورد استفاده در بیشتر برنامههای کاربری مدرن ظاهر شد. سندها، گرافها، مقدارهای Key و ستونهای عریض، همگی یک مدل داده انعطاف پذیر را ارائه میدهند که ذخیرهسازی آسان دادهها، ترکیب دادههای هر نوع ساختاری و تغییر پویا Schema را بدون Downtime و یا تاثیر بر عملکرد، امکانپذیر میسازد.
- مقیاسپذیری و عملکرد:دیتابیس NoSQL همه با تمرکز بر مقیاسپذیری ساخته شده اند، بنابراین همه آنها شامل نوعی Sharding و Partitioning میباشند. این امر توسعهی زیرساختی دیتابیس در سخت افزار Commodity مستقر در محل و یا در Cloud را ممکن ساخته که موجب رشد تقریبا نامحدود، افزایش توان عملیاتی و زمان تاخیر کمتر نسبت به دیتابیس رابطهای میشود.
- پیادهسازیهای سراسری همیشه در دسترس: دیتابیس NoSQL برای سیستمهای با دسترسی بالا طراحی شدهاند که تجربهای سازگار و با کیفیت را برای کاربران در سراسر جهان ارائه میدهند. آنها برای اجرا در Nodeهای بسیار زیاد، از جمله Replication برای همسانسازی خودکار دادهها در سرورها، Rackها و دیتابیس طراحی شدهاند.
سیستمهای NoSQL در حالی که این نوآوریها را ارائه میدهند، تواناییهای حیاتی دیتابیسهای رابطهای را که مورد انتظار کاربران هستند و از آنها استفاده میکنند را نیز تحت پوشش قرار داده است. MongoDB یک رویکرد متفاوت ارائه میدهد. MongoDB با معماری Nexusاش تنها دیتابیسی است که نوآوریهای NoSQL را همراه با خصوصیات بنیادی دیتابیسهای رابطهای در خود جای داده است.