فهرست محتوا
اگر یک برنامهنویس یا طراح وب و یا حتی علاقهمند به مباحث کامپیوتر و پایگاه داده باشید قطعا نام MongoDB را شنیدهاید. یک پایگاه داده تقریبا تازهوارد با ساختاری متفاوت که توجه خیلی از بزرگان دنیای IT مانند گوگل، فیسبوک و لینکدین را به خود جلب کرده و باعث شده است که دنیای بیگدیتا سرعت پیشرفت خوبی را داشته باشد. در این مطلب قرار است که با هم ببینیم مانگو دی بی چیست چه ویژگیهایی دارد که توانسته است این اعتبار را برای خود کسب کند.
MongoDB یا مانگو دی بی چیست؟
اگر بخواهیم یک تعریف کتابی از این پایگاه داده ارائه دهیم که شما را یاد کتابهای قطور پایگاه داده بیندازد میتوانیم بگوییم:
«مانگو دی بی یک پایگاه داده با رویکرد غیررابطهای است که در آن به جای استفاده از روابط مشخص بین دادهها و زبان پرسمان ساختیافته از یک معماری غیرساختاریافته یا NoSQL برای نظمبخشی به دادهها استفاده میکند.»
به شما توصیه میکنیم قبل از اینکه دمای مغز شما افزایش یابد از روشهای مدیتیشنی که میشناسید برای فراموش کردن این یک خط استفاده کنید و ضمن پذیرش عذرخواهی صمیمانه ما با ما همراه شوید تا ببینیم واقعا مانگو دی بی چیست؟!
مانگو دی بی نوعی از پایگاه داده است که در ساختار اصلی آن تفاوتهایی با ساختار پایگاه دادههای بزرگی مانند MariaDB ،MySQL و همینطور MSSQL وجود دارد. برای اینکه بتوانیم این تفاوت را درک کنیم باید کمی بیشتر در مورد این ساختارها صحبت کنیم و در گام اول ببینیم که NoSQL به چه معناست.
NoSQL چیست؟
اگر با ساختار پایگاه داده آشنا باشید، قطعا خواهید دانست که پایگاههای داده عادی یک ساختار جدولی داشته که اطلاعات را بر اساس یک قالب خاص در فیلدهای این جدول ذخیرهسازی میکنند و به آنها یک نظم و ساختار میدهند. به طوری که هر سطر داده یک کلید داشته و در ستونهای مختلف دادهها اشتراکاتی وجود دارند که آنها را با هم درون یک رابطه میبرند. برای توضیحات بیشتر در زمینهی پایگاه دادهها و ارتباطاتشان میتوانید به مطلب «پایگاه داده چیست» نیز مراجعه کنید.
پایگاه داده رابطهای چیست؟!
در این نوع از ارتباط، پایگاه داده یک یکپارچگی و مجموعه قوانین سختگیرانه را روی کل دادهها اعمال میکند و کلیهی دادهها موظف هستند که خود را با آن تطبیق دهند. زبان جستوجوی این پایگاه دادهها نیز به گونهای است که شما برای دستیابی به یک رکورد اطلاعاتی از این پایگاه داده باید از زبانی به نام SQL که مخفف Structured Query Language به معنای زبان پرسوجوی ساختیافته است، استفاده کنید. مبنای اصلی کار با این زبان همان قواعدی است که پایگاه داده رابطهای از آن استفاده میکند و برای پیدا کردن یک رکورد اطلاعاتی شما با استفاده از SQL باید مشخصات و رابطهی داده موردنظر خود را بیان کرده تا پایگاه داده آن داده را برای شما استخراج کند.
تا اینجای کار همه چیز دقیق و منظم به نظر میرسد و مشکلی متوجه این پایگاه داده نیست! اما داستان ما از جایی شروع میشود که دادههایی که میخواهیم در پایگاه داده ذخیره کنیم از انواع مختلف، با شرایط و ویژگیهای مختلف و همینطور در اندازههای خیلی بزرگ باشند.
پایگاه داده غیررابطهای چگونه عمل میکند؟!
اینجاست که تطبیق دادن تمامی این دادههای گوناگون با روند اصلی پایگاه داده و تعیین یک شما یا الگو که بتواند تمام این ویژگی های متعدد را پشتیبانی کند، مسئله ساز خواهد شد. این دادهها که بهتازگی تحت مفهومی به نام Big Data معرفی میشوند، به هیچ عنوان کم نیستند و در تحلیلهای بسیار زیادی از آنها استفاده میشود. اینجاست که نیاز به یک روش جدید برای این ذخیرهسازی کاملا احساس شده و کار را به جایی میکشد که مفاهیمی به نام پایگاه دادههای غیررابطهای یا همان NOSQLها مطرح میشوند. اگر بخواهیم بگوییم که مانگو دی بی چیست میتوانیم به این مورد اشاره کنیم که مانگو دی بی یکی از پاسخهای این نیاز است. اجازه دهید در ادامه به بررسی بیشتر این نوع از پایگاهها و همینطور NOSQL بپردازیم.
NOSQL یک سرواژه مخفف شده از عبارت Not Only SQL است، همانگونه که از نام آن پیداست فقط از زبان پرسوجوی ساخت یافته برای دسترسی به دادهها استفاده نمیکند و این بخاطر ساختار انعطافپذیر این نوع از پایگاه داده است. در این پایگاه داده از جداول ثابت و ویژگیهای الزامی برای تمامی دادهها خبری نیست و دادهها میتوانند انواع مختلفی را داشته باشند. عموما این ساختار آزاد توسط XML و یا JSON پیادهسازی میشود و اگر با این دو مورد آشنایی داشته باشید میدانید که این دو زبان تفسیری میتوانند هر قالبی را بسازند و آزادی عمل بسیار بالایی در کارهایی از این دست دارند.
این آزادی عمل در ذخیرهسازی و همینطور استفاده از اسکریپتهای تفسیری برای پرسوجوها و خارج شدن از قالب رابطهای SQL به بیگ دیتاها و همینطور شرکتهای بزرگ استفادهکننده از آنها که نیاز به تحلیلهای این اطلاعات بزرگ دارند، به سمت این نوع از پایگاه داده متمایل شدند.
انواع پایگاههای غیررابطهای
با توجه به ساختار سیال و همینطور قابل تغییری که پایگاه دادههای غیررابطهای دارند میتوان انواع مختلفی از آنها را مثال زد که هر کدام در سطح خود کاربردهای خوب و قابل توجهی دارند و برتری خاصی را نمیتوان بین این انواع مختلف عنوان کرد. به طور کلی میتوان گفت انواع پایگاه دادههای غیررابطهای به صورت زیر هستند:
- Key-Value یا کلید مقدار
- Wide-Column یا داده ستونی
- Document Database یا پایگاههای سندی
- Graph Database یا پایگاههای گرافی
- و در آخر Multimodel Database یا چند مدلهها
ما این انواع مختلف را نام بردیم اما معماری پایگاه داده مانگو دی بی چیست و از کدام مورد استفاده میکند؟ پایگاههای کلید مقدار پایگاههایی هستند که به ذخیره یک کلید و یک داده بسنده میکنند. این نوع از ذخیرهسازی ممکن است در مقایسه با انواع پایگاه دادههای پیچیدهای که اوراکل و مایکروسافت ارائه میکنند کمی خندهدار به نظر برسد! اما باور کنید میتواند به همان اندازه موثر باشد. داده ستونیها برای شما دادهها را به صورت ستونی ذخیرهسازی میکنند. عموما این کار برای خلاصهسازی اشتراکات یک داده انجام میگیرد و قرار نیست باعث اضافه شدن رابطههای مختلفی شود.
پایگاه سندی نوعی از پایگاه است که بر اساس اسناد کار کرده و دادهها را به صورت سندهای مختلف ذخیرهسازی میکند که این اسناد با استفاده از XML و همینطور JSON مرتبسازی میشوند.
اگر بخواهیم به عنوان یک جمعبندی مزایای NOSQL را بررسی کنیم میتوانیم بگوییم، بالا بودن مقیاسپذیری، کارایی و همینطور دسترسی سه کلید اصلی برای بالا بردن کارایی در زمینهی کار با دادههای بزرگ، که این نوع از پایگاه داده آنها را در اختیار دارد و از آنها استفاده میکند. اکنون که دیدیم NOSQL چیست و پایههای MongoDB کجا بنا شده است، اجازه دهید مجددا به بررسی این سوال که مانگو دی بی چیست بپردازیم.
مانگو دی بی چیست و از کجا آمده است؟
مانگو دی بی یک پایگاه داده از نوع غیررابطهای و NOSQL است که برخلاف پایگاه دادههای رابطهای مانند MySQL نیاز به یک ساختار منضبط و پیچیده برای نگهداری از دادهها ندارند و با استفاده از JSON یک ساختار بر پایه اسناد مختلف ایجاد میکند که برای مدیریت پایگاه دادههایی با فایلهای متنوع و مختلف در تعداد بالا بسیار مطلوب میباشد.
اما اگر بخواهیم ببینیم که ارائهدهنده مانگو دی بی کیست باید به سال 2007 میلادی سفر کنیم. یک شرکت نرمافزاری به نام 10gen کمکم کار طراحی و پایهریزی یک پایگاه داده را شروع کرده بود. پایههای مانگو دی بی در حال شکل گیری بود و نظریههای جدید NOSQL که در آن روزها بحث داغی داشت در حال جوانه زدن در دل این پایگاه داده بود. این شرکت در ابتدا قصد داشت که این خدمات را به صورت یک سرویس PaaS ارائه دهد، اما پس از گذشت 2 سال و ایجاد تغییرات مانگو دی بی به صورت یک برنامهی اوپن سورس عرضه گردید که برای همگان قابل استفاده شد.
اولین ورژن این برنامه با نام MongoDB 1.0 در فوریه 2009 منتشر گردید، ورژن 1.2 این برنامه در همان سال منتشر شد که نسبت به ورژن قبلی تفاوت زیادی داشت و ویژگیهای خوبی را خصوصا در زمینه ایندکس کردن اطلاعات و کار با توابع جاوا اسکریپت ارائه کرد که محبوبیت خوبی را به دست آورد. ورژنهای 1.4 و همینطور 1.6 نیز در سال 2010 روانه بازار شدند که پشتیبانی از IPv6 (برای اطلاعات بیشتر به مقالهی «DNS چیست» مراجعه کنید) و اشتراکگذاری دادهها از موارد مطرح این بروزرسانیها بود.
کمپانی نرمافزاری 10gen به کار خود ادامه داد و توانست در سال 2013 یک نسخه پیشرفته و خوب از مانگو دی بی را تحت نام MongoDB 2.4 ارائه دهد که نقطه عطفی در این برنامه بود و آن را تبدیل به یک برنامهی بزرگ قابل اعتماد کرد. این برنامه به حدی رشد داشت که 10gen نام خود را به .MongoDB Inc تغییر دهد و به صورت متمرکز و ثابت روی این پروژه سرمایهگذاری کند. از آن پس آپدیتها و تغییر ورژنها در این برنامه به صورت سالیانه دنبال شد و این پایگاه داده NOSQL هر سال حرف جدیدی برای گفتن داشت و یک قابلیت تازه به آن اضافه شده بود تا اینکه در سال 2017، سهام .MongoDB Inc با ارزش هر سهم 24 دلار وارد بورس نزدک شد.
اما این اتفاق برای .MongoDB Inc خیلی خوشآیند به نظر نمیرسید و گویا تغییرات ایجاد شده و تجاری شدن این شرکت انگیزهی مدیران را برای پیشرفت کم نمود. به این صورت که 4 ورژن ارائه شده بعدی این پایگاه داده که از 3.6 تا 4.4 در بین سالهای 2017 تا 2020 منتشر گردیدهاند، هیچ ویژگی خوب و یا تغییر شگرفی نداشته و همان برنامه قبلی صرفا با ویژگیهای بهبود یافته در همان زمینهها عرضه گردیدهاند. حتی پیوستن .MongoDB Inc به Alibaba Cloud در سال 2019 و پیشنهاد یک سرویس کلود تحت عنوان MongoDB as a Service هم نتوانست تغییری در این روندها ایجاد کند.
البته باید توجه داشت که این پایگاه داده همچنان افزایش کاربران را در صدر اهداف خود قرار داده و از این نظر پیشرفت فوقالعادهای داشته است. اما عدم وجود تغییرات خوبی که در سالهای گذشته برای پیشرفت فناوری در MongoDB وجود داشته است را میتوان یک شکست ضمنی برای این پایگاه داده غیر رابطهای تصور کرد.
اجازه دهید تا به بررسی دو بخش اصلی در مورد این پایگاه داده بپردازیم و ببینیم که مزایا و همینطور معایب مانگو دی بی چیست.
مزایای مانگو دی بی چیست؟!
اکنون که دیدیم مانگو دی بی چیست و از کجا آمده است و در چه زمینهای فعالیت میکند و چه فلسفهای پشت طراحی این برنامه و سیستم پایگاه داده قرار دارد، وقت آن رسیده که به بررسی این موضوع بپردازیم که فایده این همه بُروبیا چه بوده است و بهصورت شستهورُفته بیان کنیم که مزایای مانگو دی بی چیست؟ برای پاسخ این سوال میتوان عناوین زیر را معرفی نمود:
پشتیبانی از تمام مزایای زبانهای NOSQL
NOSQL بودن یا همان غیررابطهای بودن این پایگاه داده باعث شده است که مانگو دی بی از تمامی مزایای پایگاه دادههای غیررابطهای برخوردار شود. پس میتوان گفت که این پایگاه داده این سه ویژگی را به صورت ضمنی در خود دارد:
- مقیاسپذیر است: به این صورت که با بزرگ شدن اندازهها و تغییر عظیم در تعداد دادهها هیچ افتی در کارایی احساس نخواهد شد.
- کارایی بالایی دارد: به این صورت که بازدهی این پایگاه داده بالا بوده و میتوان از آن برای موارد حساس و بزرگ استفاده نمود و با کمترین امکانات بهترین بازدهی را خواهد داشت.
- انعطافپذیر است: به این معنی که شما این امکان را دارید تا از این پایگاه داده برای موارد بسیار زیادی استفاده کنید و به این صورت نیست که صرفا مربوط به نوع خاصی از دادهها (بهعنوان مثال بیگ دیتاها) باشد.
عموما این سه ویژگی همهی آن چیزی است که در پاسخ به سوال مزایای مانگو دی بی چیست به شما ارائه خواهد شد اما مزایای این پایگاه داده به همینجا ختم نمیشود. سایر مزایای این پایگاه داده را که میتوان آنها را در معتبرترین پایگاه دادههای رابطهای مانند MySQL یا MSSQL مشاهده نمود، در این پایگاه داده نیز وجود دارند که آنها را بررسی خواهیم کرد.
اعمال کوئریهای مختلف
وقتی صحبت از NOSQL و غیررابطهای بودن به میان میآید یک تصویر ایجاد میشود که امکان اعمال کوئری روی این پایگاههای داده وجود ندارد. اما به هیچ عنوان اینطور نیست. البته جنس کوئریها متفاوت است و در این پایگاه داده با استفاده از جاوا اسکریپت میتوان کوئریهای مختلف را روی دادهها اعمال کرده و دادههای موردنظر خود را استخراج کنید.
ایندکسگذاری و پشتیبانی از اطلاعات
یکی دیگر از خدمات مهمی که در تصور عامه در مانگو دی بی وجود ندارد بحث ایندکسگذاری روی دادهها و شمارهگذاری آنها و همینطور پشتیبانگیری بهصورتی است که اگر بخشی از دادهها به صورت سختافزاری صدمه دیدند، قابل بازیابی باشند.
عموما چون مانگو دی بی در سطح وسیعی مانند گوگل و فیسبوک اطلاعات را مدیریت میکند ممکن است این تصور ایجاد گردد که امکان استفاده از این قابلیتها وجود ندارد زیرا زبانهای غیررابطهای زیر بار این سختیها نمیروند، اما این یک تصور پوچ بیش نیست و در زمینه ایندکسگذاری و تهیه نسخههای پشتیبان به صورت Replicas این پایگاه داده از پایگاه دادههای رابطهای هیچ چیزی کم ندارد.
Load Balancing یا تقسیم بار
وجود یک سیستم که بهوسیله آن بتوان پایگاه دادههای توزیع شده را به صورت هماهنگی روی یک موتور جستجو لود کرده و کار جستجو در بین آنها را انجام دهند زیاد هستند. اما ممکن است این تصور ایجاد شود که مانگو دی بی نمیتواند این قابلیت را مانند پایگاه دادههای رابطهای دنبال کند.
مانگو دی بی برای تقسیم بار و هماهنگ کردن دادههای توزیع شده برای موتورهای جستجوی بزرگ مانند گوگل، از یک تکنیک خاص به نام Sharding بهره میگیرد. Horizontal Sharding یا همان Sharding یک تکنیک ایندکسگذاری خاص روی دادهها است که با استفاده از بررسیهای سطری روی دادهها بخشی از آنها را لود کرده و برای موتور جستجو قابل دسترس میکند تا در صورت نیاز این موتورها تمام بلاکهای دادهی مربوطه را به راحتی لود کنند.
این نوع از Load Balancing را میتوان به عنوان یکی از پیشرفتهترین الگوهای مورد استفاده برای این قابلیت معرفی نمود.
امکانات سمت سرور با جاوا اسکریپت
خیلی از پایگاه دادهها که از زبانهای برنامهنویسی پیچیده و رابطهای برای سمت سرور خود استفاده میکنند. جاوا اسکریپت که یکی از زبانهایی است که بدون در نظر گرفتن کاراییها یک تجربه کاربری خوب را فراهم کرده و یادگیری آن ساده بوده و با توجه به قابلیتهای خوب مانگو دی بی در وب و پایگاه دادههای وببیس انتخاب جاوا اسکریپت به عنوان زبان بک اند و دادن این امتیاز به برنامهنویسان وب که با این برنامه بهخوبی کار میکنند یک حرکت هوشمندانه از طرف طراحان اولیه برای این پایگاه داده بوده است.
پشتیبانی از تراکنشهای اتمی و یکپارچه
پشتیبانی از تراکنش یکی از موارد مهمی است که میتواند در کاربردی کردن و خصوصا اینترنتی کردن پایگاههای داده نقش مهمی داشته باشد. پیش از آنکه به بررسی این مورد که وضعیت تراکنشها در مانگو دی بی چیست بپردازیم اجازه دهید تا در مورد اینکه تراکنش دقیقا چیست کمی توضیح دهیم.
Transaction یا همان تراکنش یک قطعه کد در برنامه است که کارکرد اصلی آن در مورد جابهجایی اطلاعات از پایگاه داده است. اما با شرایطی خاص!
این شرایط خاص به این معناست که وقتی شما کدی را مینویسید، تمام کد باید اجرا شود و این برنامه نمیتواند نیمهکاره رها شود. در صورتی که این برنامه نیمهکاره رها شود باید شرایط پایگاه داده به حالتی برگردد که پیش از اجرای برنامه بوده است. به عنوان مثال عملیات انتقال وجه در بانکها یک تراکنش میباشد. این تراکنش به این صورت اتفاق میافتد که وقتی پولی به یک حساب اضافه میشود، حتما باید از حساب دیگری کم شده باشد. در صورتی که پول به حسابی واریز شده و بر اثر هر مشکلی از حساب مبدا کم نگردد، وجه واریز شده به حساب مقصد نیز کم خواهد شد.
پشتیبانی از این قابلیت برای پایگاه دادهای که میخواهد در سطح اینترنت کار کند یکی از واجبات بزرگ است که مانگو دی بی توانسته است آن را پیادهسازی کند.
ایرادات مانگو دی بی چیست؟
مانگو دی بی در کمتر بودن ایرادات نیز یک سروگردن از بقیه پایگاه دادههای همسان با خود جلوتر بوده و مشکلات آن محدود به دو مورد خاص است. البته ممکن است در مشکلات مختلفی که برای این پایگاه داده مشاهده میکنید، موارد بیشتری را نیز ببینید که این ایرادات رفع شده و دیگر نمیتوان آنها را به عنوان ایراد در نظر گرفت.
به عنوان مثال از این دسته ایرادات میوان به عدم پشتیبانی و ناسازگاری با تراکنش را مطرح کرد که از سال 2018 این پایگاه داده تمام ایرادات مربوطه را رفع کرد و بهبودهایی را در آپدیتهای نسخه 4 به بعد برای کار با تراکنشها ارائه داد.
اما دو مورد ایراد اساسی برطرف نشده مانگو دی بی چیست؟! مورد اول از این ایرادات به کلید خارجی و مورد دوم به کار با نود یا گره اصلی تعیین شده توسط کاربر مربوط میشود که در ادامه آنها را توضیح خواهیم داد.
در مورد کلیدهای خارجی یا همان Foreign Key وقتی که شما با استفاده از یک کلید خارجی قصد ارتباط بین المانهای پایگاه داده خود را داشته باشید، ممکن است به علت غیررابطهای بودن مشکلاتی ایجاد شود و ثبات و پایداری دادههای داخل پایگاه داده به خطر بیفتد.
مورد بعدی نیز مربوط به نودها یا گرهها میباشد. این ایراد را میتوانید در خیلی از مطالب مشاهده کنید اما در مطالب دیگر به همین توضیح مختصر که در صورت از بین رفتن نود اصلی بقیه نودها دچار مشکل شده و ساختار پایگاه داده از هم میپاشد بسنده کردهاند! اما آیا این تعریف کتابی معنایی هم دارد؟!
برای بررسی اینکه این حرف چه معنایی دارد اجازه دهید در ابتدا ببینیم نود چیست. نودها یا گرههای پایگاه داده اولین دادههایی هستند که در پایگاه داده وارد شده و هر کاربری برای ورود اطلاعات از نود اصلی خود استفاده کرده و در پشت آن تمامی اطلاعاتی که دارد به صورت یک گراف یا بهتر بگوییم یک درخت به هم متصل شده و در پایگاه داده قرار خواهند گرفت. نود اصلی همانند پوشه Root خواهد بود و نگهدارنده اولین اطلاعات در مورد سیستم ذخیره اطلاعات است.
در ویندوز شما نمیتوانید پوشه Root را پاک کنید. اما در مانگو دی بی به این علت که این نود ریشهی خودش از نوع اطلاعات است نه یک دایرکتوری میتوان آن را پاک کرد و با این پاک کردن، سیستم فایل دچار مشکل میشود. برای رفع این مشکل به سراغ آدرسهای آن رفته و یک نود را به عنوان نود اصلی انتخاب کرده و سایر نودهای فرعی دیگر را به آن پیوند دهید. در این حالت ایرادی که نگران آن بودیم برطرف شده است، اما این کار مدتی طول خواهد کشید و بسته به اینکه منابع شما چقدر باشد متفاوت خواهد بود.
در این مدت زمان کوتاه قطعی، شما یک سیستم بدون پایگاه داده را خواهید داشت که متوقف شده است. پس این ایراد در مورد مانگو دی بی وجود دارد.
نتیجهگیری
در این مطلب به تفصیل در مورد اینکه مانگو دی بی چیست و این پایگاه داده برای ما چه کاری را انجام خواهد داد صحبت کردیم و دیدیم که از کجا آمده است و فلسفه و اساس کار آن چیست. با بررسی مزایای این پایگاه داده غیررابطهای به این سوال که توجیه استفاده از مانگو دی بی چیست پرداختیم و معایب آن را نیز بررسی نمودیم. حال انتخاب با خود شماست که برای کاری که میخواهید از این پایگاه داده استفاده کنید یا به سراغ موارد مشابهی بروید که فکر میکنید میتوانند برای شما مفید باشند. از این موارد میتوان به پایگاه داده Cassandra اشاره نمود که همان مانگو دی بی است اما با اصلاح ایرادات در زمینهی نودها که در مورد آن توضیح دادیم.