آشنایی با MongoDB و کاربردهای آن
MongoDB چیست؟
MongoDB یک پایگاه داده سند گرای منبع باز است که برای ذخیره مقیاس بزرگی از دادهها طراحیشده است و همچنین به شما امکان میدهد تا با آن دادهها بسیار کارآمد کارکنید. این پایگاه داده زیر پایگاه داده NoSQL دستهبندی میشود زیرا ذخیره و بازیابی دادهها در MongoDB بهصورت جداول نیست.
پایگاه داده MongoDB توسط MongoDB.Inc تحت SSPL (مجوز عمومی سمت سرور) توسعه و مدیریت میشود و ابتدا در فوریه ۲۰۰۹ منتشر شد. همچنین پشتیبانی رسمی از درایورها را برای تمام زبانهای محبوب مانند C، C++، C#، و Net، Go، جاوا، Node.js، Perl، PHP، Python، Motor، Ruby، Scala، Swift، Mongoid و .. را ارائه میدهد بنابراین، میتوانید با استفاده از هر یک از این زبانها یک برنامه ایجاد کنید. امروزه شرکتهای زیادی وجود دارند که از MongoDB مانند فیسبوک، نوکیا، eBay، Adobe، Google و غیره برای ذخیره حجم زیادی از دادههای خود از آن استفاده میکنند.
MongoDB چگونه کار میکند؟
همانطور که میدانیم MongoDB یک سرور پایگاه داده است و دادهها در این پایگاه دادهها ذخیره میشوند. یا به عبارتی محیط MongoDB به شما سروری میدهد که میتوانید آن را راهاندازی کنید و سپس با استفاده از MongoDB چندین پایگاه داده روی آن ایجاد کنید.
به دلیل پایگاه داده NoSQL، دادهها در مجموعهها و اسناد ذخیره میشوند. ازاینرو پایگاه داده، مجموعه و اسناد به شکل زیر به یکدیگر مرتبط هستند:
پایگاه داده MongoDB مانند پایگاه داده MYSQL حاوی جداول است. شما مجاز به ایجاد چندین پایگاه داده و چندین مجموعه هستید.
اکنون در داخل مجموعه اسنادی داریم. این اسناد حاوی دادههایی هستند که ما میخواهیم در پایگاه داده MongoDB ذخیره کنیم و یک مجموعه واحد میتواند حاوی چندین سند باشد و شما فاقد طرحواره هستید، به این معنی که لازم نیست یک سند با سند دیگر مشابه باشد.
اسناد با استفاده از فیلدها ایجاد میشوند. فیلدها جفتهای کلید-مقدار در اسناد هستند، درست مانند ستونها در پایگاه داده رابطهای. مقدار فیلدها میتواند از هر نوع داده BSON مانند double، string، boolean و غیره باشد.
دادههای ذخیرهشده در MongoDB در قالب اسناد BSON هستند. در اینجا، BSON مخفف نمایش باینری اسناد JSON است. یا بهعبارتدیگر در backend سرور MongoDB دادههای JSON را به یک فرم باینری تبدیل میکند که به نام BSON شناخته میشود و این BSON با کارایی بیشتری ذخیره و پرسوجو میشود.
در اسناد MongoDB، شما مجاز به ذخیره دادههای تودرتو هستید. این تودرتویی دادهها به شما امکان میدهد روابط پیچیدهای بین دادهها ایجاد کنید و آنها را در یک سند ذخیره کنید که کار و واکشی دادهها را در مقایسه با SQL بسیار کارآمد میکند. در SQL، برای دریافت دادهها از جدول ۱ و جدول ۲، باید پیوندهای پیچیده بنویسید. حداکثر اندازه سند BSON 16 مگابایت است.
توجه: در سرور MongoDB، شما مجاز به اجرای چندین پایگاه داده هستید.
بهعنوانمثال، ما یک پایگاه داده به نام makhtabkhooneh داریم. در داخل این پایگاه دو مجموعه و در این مجموعهها دو سندداریم. و در این اسناد ما دادههای خود را بهصورت فیلد ذخیره میکنیم. همانطور که در تصویر زیر نشان دادهشده است:
mongoDB چه تفاوتی با RDBMS دارد؟
برخی از تفاوتهای عمده بین MongoDB و RDBMS به شرح زیر است:
RDBMS
- یک پایگاه داده رابطهای است.
- برای ذخیرهسازی دادههای سلسله مراتبی مناسب نیست.
- یک طرحواره از پیش تعریفشده دارد.
- حول خواص ACID (اتمی، سازگاری، جداسازی و دوام) متمرکز است.
- ازنظر عملکرد، کندتر از MongoDB است.
MongoDB
- اینیک پایگاه داده غیر رابطهای و سند محور است.
- برای ذخیرهسازی دادههای سلسله مراتبی مناسب است.
- طرحواره پویا دارد.
- حول قضیه CAP (ثبات، در دسترس بودن و تحمل پارتیشن) متمرکز است.
- ازنظر عملکرد بسیار سریعتر از RDBMS است.
امکانات و ویژگیهای MongoDB
پایگاه داده MongoDB یک سری ویژگیها را دارد که آن را به یک پایگاه داده نوین و محبوب تبدیل کرده است. ازجمله مهمترین ویژگیهای MongoDB میتوان به موارد زیر اشاره کرد:
- فاقد طرحواره
- مبنی بر سند
- نمایهسازی
- مقیاسپذیری
- تکرار یا Replication
- تجمع یا Aggregation
- عملکرد بالا
پایگاه داده بدون طرحواره:
بدون طرحواره بودن ویژگی عالی ارائهشده توسط MongoDB است. پایگاه داده بدون طرحواره به این معنی است که یک مجموعه میتواند انواع مختلفی از اسناد را در خود نگه دارد. یا بهعبارتدیگر، در پایگاه داده MongoDB، یک مجموعه واحد میتواند چندین سند را در خود جای دهد و این اسناد ممکن است از تعداد فیلدها، محتوا و اندازههای مختلف تشکیل شوند.
لزومی ندارد که یک سند شبیه به سند دیگر مانند پایگاه دادههای رابطهای باشد. با توجه به این ویژگی جالب، MongoDB انعطافپذیری زیادی را برای پایگاه دادهها فراهم میکند.
مبتنی برسند:
در پایگاه داده MongoDB، تمام دادهها بهجای جداول مانند RDBMS در اسناد ذخیره میشوند. در این اسناد، دادهها بهجای ردیفها و ستونها در فیلدها (جفت کلید-مقدار) ذخیره میشوند که باعث میشود دادهها در مقایسه با RDBMS بسیار انعطافپذیرتر شوند. و هر سند حاوی شناسه شی منحصربهفرد خود است.
نمایهسازی یا indexing:
در پایگاه داده MongoDB، هر فیلد در اسناد با شاخصهای اولیه و ثانویه ایندکس میشود که این امر دریافت یا جستجوی دادهها از مجموعه دادهها را آسانتر میکند و زمان کمتری را میگیرد. اگر دادهها ایندکس نمیشوند، در پایگاه داده هر سند را با پرسوجوی مشخصشده باید جستجو کنیم که زمان زیادی میبرد و کارآمد نیست.
مقیاسپذیری:
MongoDB مقیاسپذیری افقی را با کمک Sharding فراهم میکند. Sharding به معنای توزیع دادهها در چندین سرور است، در اینجا مقدار زیادی از دادهها با استفاده از کلید خرده به تکههای داده تقسیم میشوند و این تکههای داده بهطور مساوی در بین خردههایی که در بسیاری از سرورهای فیزیکی قرار دارند توزیع میشوند. همچنین ماشینهای جدیدی را به یک پایگاه داده در حال اجرا اضافه میکند.
Replication
پایگاه داده MongoDB با کمک Replication دسترسی و افزونگی بالایی را فراهم میکند، چندین نسخه از دادهها ایجاد میکند و این کپیها را به سرور دیگری ارسال میکند تا در صورت خرابی یک سرور، دادهها از سرور دیگری بازیابی شوند.
Aggregation:
امکان انجام عملیات بر رویدادههای گروهبندیشده و دریافت یک نتیجه واحد یا نتیجه محاسبهشده را میدهد. شبیه عبارت SQL GROUPBY است. این سه تجمیع مختلف را فراهم میکند، یعنی خط لوله تجمع، عملکرد کاهش نقشه و روشهای تجمیع تک منظوره.
عملکرد بالا:
عملکرد MongoDB به دلیل ویژگیهایی مانند مقیاسپذیری، نمایهسازی، تکرار و غیره در مقایسه با پایگاه داده دیگر بسیار بالا است.
مزایای استفاده از MongoDB:
- یک پایگاه داده NoSQL بدون طرحواره است. هنگامیکه با MongoDB کار میکنید، نیازی به طراحی طرحواره پایگاه داده ندارید.
- از عملیات پیوستن پشتیبانی نمیکند.
- انعطافپذیری زیادی برای فیلدهای موجود در اسناد فراهم میکند.
- شامل دادههای ناهمگن است.
- عملکرد بالا، در دسترس بودن، مقیاسپذیری را فراهم میکند.
- از Geospatial بهطور مؤثر پشتیبانی میکند.
- اینیک پایگاه داده سند گرا است و دادهها در اسناد BSON ذخیره میشوند.
- همچنین از انتقال ACID سند چندگانه (رشته از MongoDB 4.0) پشتیبانی میکند.
- نیازی به تزریق کد SQL ندارد.
- بهراحتی با Big Data Hadoop ادغام میشود
معایب استفاده از MongoDB:
- از حافظه بالایی برای ذخیرهسازی اطلاعات استفاده میکند.
- شما مجاز به ذخیره بیش از ۱۶ مگابایت داده در اسناد نیستید.
- تودرتوی دادهها در BSON نیز محدود است، شما مجاز به تودرتو کردن دادهها در بیش از ۱۰۰ سطح نیستید.
کجا از MongoDB استفاده کنیم؟
پایگاه داده MongoDB در سناریوهای زیر بر RDBMS ترجیح داده میشود:
- Big Data: اگر مقدار زیادی داده برای ذخیره در جداول دارید، قبل از پایگاه داده RDBMS به MongoDB فکر کنید. MongoDB راهحلی برای پارتیشنبندی و اشتراکگذاری پایگاه داده شما ساخته است.
- طرحواره ناپایدار: افزودن یک ستون جدید در RDBMS سخت است درحالیکه MongoDB بدون طرحواره است. افزودن یک فیلد جدید، روی اسناد قدیمی اثر نمیگذارد و بسیار آسان خواهد بود.
- دادههای توزیعشده ازآنجاییکه چندین نسخه از دادهها در سرورهای مختلف ذخیره میشوند، بازیابی دادهها در MongoDB فوری و ایمن است حتی اگر یک نقص سختافزاری وجود داشته باشد.
اجرای MongoDB در پایتون
پایتون بهعنوان یکی از محبوبترین و پرکاربردترین زبانهای برنامهنویسی، قابلیت استفاده از MongoDB را با استفاده از کتابخانه “PyMongo” دارد. در این قسمت ما سعی میکنیم که با استفاده از پایتون شروع به ساخت یک پایگاه داده MongoDB بکنیم.
- پایتون برای دسترسی به پایگاه داده MongoDB به درایور MongoDB نیاز دارد.
- در این آموزش از درایور MongoDB “PyMongo” استفاده خواهیم کرد.
- توصیه میکنیم برای نصب “PyMongo” از PIP استفاده کنید.
- PIP بهاحتمالزیاد قبلاً در محیط پایتون شما نصبشده است.
برای نصب PyMongo در خط فرمان پایتون خود یا در ترمینال عبارت زیر را وارد کنید تا پایگاه داده MongoDB برای شما نصب شود.
pip install pymongo
برای اینکه تست کنیم که PyMongo روی محیط ما نصبشده یا خیر، دستور آن را در محیط برنامهنویسی پایتون وارد میکنیم تا ببینیم نتیجه چه خواهد شد. اگر خطا نداد، PyMongo بهدرستی نصبشده است.
import pymongo
طبق تصویر زیر pymongo بهدرستی روی سیستم ما نصب شد.
ساخت یک دیتابیس MongoDB با پایتون
برای ایجاد یک پایگاه داده در MongoDB، با ایجاد یکشی MongoClient شروع کنید، سپس یک URL اتصال با آدرس IP صحیح و نام پایگاه دادهای که میخواهید ایجاد کنید را مشخص کنید.
MongoDB درصورتیکه پایگاه داده وجود نداشته باشد، ایجاد میکند و با آن ارتباط برقرار میکند.
دستورات زیر را برای ساخت یک دیتابیس در پایتون وارد میکنیم.
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["mydatabase"]
نکته مهم: در MongoDB، پایگاه داده تا زمانی که محتوا دریافت نکند ایجاد نمیشود!
MongoDB منتظر میماند تا یک مجموعه (جدول) با حداقل یک سند (رکورد) ایجاد کنید تا اینکه واقعاً پایگاه داده (و مجموعه) را ایجاد کند.
بررسی کنید که آیا پایگاه داده وجود دارد یا خیر:
print(myclient.list_database_names())
همانطور که مشاهده میکنید، دیتابیس ما موجود است و ایجاد شده است.
ایجاد مجموعه در MongoDB
برای ایجاد یک مجموعه در MongoDB، از آبجکت پایگاه داده استفاده کنید و نام مجموعهای را که میخواهید ایجاد کنید، مشخص کنید. اگر مجموعه MongoDB وجود نداشته باشد، آن را ایجاد میکند. ما یک مجموعه تحت عنوان customers درست میکنیم. دستورات زیر را به کار ببرید.
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["mydatabase"] mycol = mydb["customers"]
بررسی میکنیم که آیا مجموعهای تحت عنوان customers وجود دارد یا خیر:
print(mydb.list_collection_names())
افزودن به مجموعه در پایگاه داده MongoDB
برای درج یک رکورد یا سندی که در MongoDB نامیده میشود در یک مجموعه، از متد insert_one() استفاده میکنیم.
اولین پارامتر متد insert_one() دیکشنری است که شامل نام(ها) و مقدار(های) هر فیلد در سندی است که میخواهید درج کنید.
درج یک رکورد در مجموعه ” customers”:
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["mydatabase"] mycol = mydb["customers"] mydict = { "name": "John", "address": "Highway 37" } x = mycol.insert_one(mydict)
خروجی به شکل زیر خواهد بود:
میتوان چندین رکورد را همزمان هم به مرجوعه افزود. بهصورت خلاصه عملیات متفاوت و متعددی را میتوان با استفاده از پایگاه داده MongoDB روی دیتابیس انجام داد. ازجمله مهمترین عملیات شامل موارد زیر است :
- ایجاد دیتابیس
- ایجاد مجموعه
- افزودن به دیتابیس
- حذف از دیتابیس
- جستجو در دیتابیس
- آپدیت کردن
- محدود کردن
- مرتبسازی
- و…