محیطی را تصور کنید که استفاده پایگاه‌داده در آن به قدری ساده است که گاهی وقت‌ها یادتان مي‌رود در حال استفاده از آن هستید. هرگاه که مي‌خواهید به مجموعه سرورهای خود یک ماشین جدید اضافه مي‌کنید و بدون نیاز به تنظیمات خاصی، کل مجموعه پایگاه‌داده از قدرت و ظرفیتی جدید برخوردار مي‌شود. تصور کنید برای یک بار هم که شده، امکان تمرکز روی کار اصلی را خواهید داشت و بدون استرس درباره پایگاه داده، محل کار خود را به موقع ترک خواهید کرد. اگرچه این‌ها آرزوهایی بسیار ایده­‌آل هستند اما پایگاه‌داده mongoDB برای تحقق آن‌ها تا حد امکان، طراحی و ساخته شده است.
مقدمه‌ای بر mongoDB
پایگاه‌داده mongoDB که بر‌اساس کلمه Humongous (به معنی بسیار بزرگ) نام‌گذاری شده است، نوع جدیدی از پایگاه‌داده‌ای NoSQL است که در آن خبری از مفاهیم جدول‌ها، سطر، عملیات Join، کلیدهای خارجی، SQL و... نیست. این پایگاه‌داده با نیازمندی‌هاي ACID انطباق دارد و در نوع خود، یکی از باسابقه‌ترین پایگاه‌هاي داده NoSQL به شمار مي‌رود. در mongoDB اطلاعات در قالب اسناد ذخیره مي‌شوند و به همین دلیل، به آن، پایگاه‌داده اسنادی هم گفته مي‌شود. این ساختار، به mongoDB اجازه مي‌دهد که سرعتی خیره‌کننده و مقیاس‌پذیری عالی و آساني در استفاده را به ارمغان آورد.
با این حال، این پایگاه‌داده همانند بسیاری از هم‌نوعان خود، یک راه‌حل ایده‌آل برای تمام چالش‌ها نیست و محدودیت‌هایی را نیز ایجاد مي‌کند. به‌عنوان مثال، عدم وجود تراکنش در این پایگاه‌داده باعث مي‌شود که نتوان یک برنامه حسابداری با آن نوشت. اما نقطه قوت این پایگاه‌داده در ارائه تحلیل‌ها با سرعت بالا (مثلاً یک نوع Google Analytics محلی برای یک سایت) یا ذخیره‌سازی داده‌هاي‌پیچیده با روشی ساده است. همچنين، مي‌توان از آن برای ذخیره اسناد در کنار پلتفرم‌های موجود رابطه‌ای نیز استفاده کرد.

نصب و راه اندازی
با توجه به این‌که mongoDB با استفاده از C++ نوشته شده است، به‌سادگی امکان انطباق آن در هر پلتفرمی فراهم است و به همین دلیل، باینری‌هاي مربوط به لینوکس، ویندوز، سولاریس و مک از سایت آن قابل دانلود است. پس مي‌توانید با مراجعه به سایت فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ] نسخه مناسب خود را انتخاب و دانلود کرده و آماده مراحل بعدی شوید. توجه کنيد که نسخه‌هاي 32 بیتی این پایگاه‌داده دارای محدودیت 2,5 گیگابایت برای هر سرور است. در سیستم‌عامل لینوکس دو روش کلی برای نصب mongoDB وجود دارد که شامل نصب‌دستی و استفاده از دایرکتوری‌هاي آنلاین برای نصب خودکار می‌شود. در اوبونتو، مي‌توان این پایگاه‌داده را با استفاده از سیستم‌مدیریت بسته‌هاي نرم‌افزاری سیستم، از طریق مخازن mongoDB نصب کرد.
" mongoDB با استفاده از ++C نوشته شده است، به‌سادگی امکان به‌همين دليل انطباق آن در هر پلتفرمی فراهم است."

در نسخه‌هاي اخیر این سیستم‌عامل، مخازن mongoDB موجود و با یک جست‌وجوی ساده قابل انتخاب و نصب است اما در صورتی که نتوان آن را در اوبونتو پیدا کرد، باید در فایل فهرست مخازن اوبونتو که در آدرس etc/apt/sources.list/ قرار دارد، عبارت زیر را وارد کرد:

deb فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ] (version.number) 10gen

در این عبارت به‌جای (version.number)، باید نسخه اوبونتوی مورد استفاده جایگزین شود. پس از این کار، باید با استفاده از خط فرمان و دستور زیر، مجموعه مخازن سیستم‌عامل را به‌روزرسانی کنيم.

$ sudo aptitude update

پس از این کار، مي‌توان به سادگی و با استفاده از دستور زیر در خط فرمان، نسخه پایدار mongoDB را نصب کرد.
$ sudo aptitude install mongodb-stable پس از این کار، mongoDB روی سیستم مقصد نصب‌شده و آماده کار است. البته برای نصب mongoDB روی لینوکس از روش دستی نیز مي‌توان استفاده کرد اما به دلیل برخی محدودیت‌هایی که برای پایگاه‌داده به وجود خواهد آورد (که البته در صورتی که حرفه‌ای باشید به راحتی قابل حل‌کردن است) چندان توصیه نمی‌شود. نصب mongoDB در ویندوز بسیار ساده است. در اصل، استفاده از mongoDB در ویندوز به نصب احتیاجی نداشته و تنها لازم است تا فایل دانلود شده را در محلی مطمئن از حالت فشرده خارج کنید. فایل‌هاي اجرایی در پوشه BIN قرار دارند و برای اجرای پایگاه داده، تنها به آن‌ها نیاز داریم. توجه به این نکته ضروری است که mongoDB سعی مي‌کند تا داده‌هاي خود را در دایرکتوری /data/db در لینوکس و مک یا در پوشه C:\Data\db ویندوز ذخیره کند و در صورتی که نتواند آن‌ها را بیابد، با خطا مواجه خواهد شد. به همین دلیل قبل از اجرای آن این دایرکتوری‌ها را ایجاد کرده و در صورتی که مي‌خواهید از پوشه دیگری برای این کار استفاده کنيد، فایل اجرایی را با پارامتر --dbpath به همراه آدرس مورد نظر اجرا کنيد.
"برای کار با پوسته mongoDB نیازی به نصب آن روی سیستم خود ندارید. سایت این پایگاه داده، یک کنسول آزمایشی آنلاین نیز راه‌اندازی کرده که برای انجام امور آموزشی یا آزمايش‌هاي مختلف قابل استفاده است."

پس از آماده‌سازی، با اجرای فایل اجرایی mongod در پوشه باینری نصب شده در سیستم مقصد، پایگاه‌داده اجرا خواهد شد که دیگر در ویندوز و لینوکس تفاوتی با یکدیگر نخواهد داشت. توجه کنيد که در این پوشه، فایل‌های اجرایی دیگری نیز وجود دارند که برای برقراری ارتباط با پایگاه‌داده یا تنظیم و پیکربندی آن به‌کار مي‌روند. در این پوشه، وظیفه فایل‌های اجرایی موجود از قرار زیر است:
- mongo: پوسته ارتباطی با پایگاه‌داده
- mongod: هسته اجرایی پایگاه‌داده
- mongos: پردازه اجرای عملیات sharding به‌صورت خودکار
- mongodump: ابزار خروجی گرفتن از پایگاه‌داده
- mongorestore: ابزار بازگردانی و ورود داده‌ها به پایگاه‌داده در صورتی که mongoDB را با تنظیمات پیش‌فرض اجرا کنيم، به طور خودکار یک پایگاه‌داده با نام test در آن ایجاد شده و آماده استفاده است. برای دسترسی به mongoDB مي‌توان از پوسته خط فرمانی آن استفاده کرد که در تمام سیستم‌عامل‌ها قابل استفاده است. برای اجرای آن، مي‌توان به سادگی فایل اجرایی mongo را با تایپ نام آن در خط فرمان اجرا کرد. در صورت اجرا با تنظیم‌هاي پیش فرض، این پوسته تلاش مي‌کند که به پایگاه‌داده نصب شده به‌صورت محلی متصل شود. در صورت درست پیش‌رفتن همه چیز، کاربر پنجره‌ای مشابه شکل 1 را در ویندوز مشاهده خواهد کرد.
شکل 1- پایگاه ‌داده mongoDB در حال اجرا روی ویندوز به همراه پوسته ارتباطی آن در پنجره جلویی
بهتر است بدانید که برای کار با پوسته mongoDB نیازی به نصب آن روی سیستم خود ندارید. سایت این پایگاه داده، یک کنسول آزمایشی آنلاین نیز راه‌اندازی کرده است (در بخش Try it Out) که برای انجام امور آموزشی یا آزمايش‌هاي مختلف قابل استفاده است. کار با این کنسول در نوع خود بسیار سودمند، سریع و کم زحمت بوده و در کسب مهارت در mongoDB بسیار مؤثر خواهد بود. شکل ۲ نمایی از این کنسول را نشان مي‌دهد. قبل از انجام هر کاری، بهتر است دستورات اصلی کار با پایگاه‌داده از طریق پوسته مربوطه را که در جدول 1 آورده شده است، مرور کنيد. این دستورات، در آینده برای انجام امور ارتباطی با mongoDB استفاده خواهند‌شد.
شکل 2- کنسول مدیریتی آزمایشی mongoDb که به‌صورت آنلاین در دسترس است
جدول 1- دستورهاي اصلی برای کار با پوسته mongoDB
"برای استفاده از درایور mongoDB در PHP، مي‌توانید از مخزن معروف PECL که حاوی مجموعه‌ای از افزونه‌هاي سودمند PHP است در سیستم‌عامل لینوکس استفاده کنيد."
اتصال از طریق PHP
پس از انجام امور فوق، باید درایور مناسبی را نیز برای ارتباط با پایگاه‌داده از طریق پلتفرم برنامه‌نویسی مورد‌نظر خود دانلود و نصب کنيد. خوشبختانه، درایورهای بسیار مناسب و پایداری برای ارتباط با پایگاه‌داده mongoDB برای بيشتر زبان‌هاي برنامه‌نویسی موجود است. برای دانلود و نصب این درایورها، مي‌توانید به بخش درایورهای mongoDB در سایت آن مراجعه کنيد. همان‌طور که در شکل ۳ نیز نشان داده شده است، تعداد بسیاری از زبان‌هاي برنامه‌نویسی تحت پوشش mongoDB قرار دارند.
شکل 3- بخش دانلود درایورهای mongoDB برای زبان‌هاي برنامه‌نویسی مختلف
برای استفاده از درایور mongoDB در PHP که در بخش‌هاي بعدی به آن نیاز خواهیم داشت، مي‌توانید از مخزن معروف PECL که حاوی مجموعه‌ای از افزونه‌هاي سودمند PHP است در سیستم‌عامل لینوکس استفاده کنيد. طریقه نصب درایور مذکور در اوبونتو نیز همانند روش توضیح‌داده‌شده برای خود mongoDB و با استفاده از دستور زیر است:
$ sudo pecl install mongo برای نصب دستی این درایور در لینوکس و همچنین ویندوز کارهای بیشتری باید انجام داد که با مراجعه به بخش مربوطه در سایت mongoDB مي‌توانید به راحتی با آن آشنا شوید. برای برقراری اتصال با پایگاه‌داده از طریق PHP و با استفاده از درایور نصب شده آن، باید از کدهای زیر استفاده کرد:
$connection = new Mongo(); در این حالت، درایور مذکور تلاش مي‌کند تا به پایگاه‌داده موجود روی سرور محلی و با استفاده از پورت پیش‌فرض 27017 متصل شود. در صورتی که پایگاه‌داده روی ماشینی دیگر و پورتی متفاوت موجود است، باید از کد زیر استفاده کرد:
$connection = new Mongo(“example.com:12345”); پس از انجام کارهای لازم از طریق کد PHP، باید اتصال به پایگاه‌داده را با استفاده از کد زیر بست: $connection->close(); اکنون که با روش نصب و راه‌اندازی mongoDB و مفاهیم اولیه برقراری ارتباط با آن از طریق PHP آشنا شده‌اید، بهتر است کمی به معماری و ساختار داده‌ای آن بپردازیم.
"در این پلتفرم، یک پایگاه‌داده مي‌تواند حاوی مجموعه‌هایی (Collection) باشد که خود حاوی صدها یا هزاران سند با ساختار متفاوت باشند."

معماری داده‌ای MongoDB
همان‌طور که قبلاً نیز گفته شد، پایگاه‌داده mongoDB یک پایگاه‌داده اسنادی NoSQL است که انعطاف بسیار بالایی را در ذخیره داده‌ها فراهم مي‌سازد. در این پلتفرم، یک پایگاه‌داده مي‌تواند حاوی مجموعه‌هایی(Collection) باشد که خود حاوی صدها یا هزاران سند با ساختار متفاوت باشند. این انعطاف، دست برنامه‌نویس را در کار با پایگاه‌داده از طریق زبان‌هاي داینامیکی مانند PHP باز گذاشته و انجام بسیاری از امور را به پایگاه‌داده محول مي‌کند. برای آشنایی بهتر با این پایگاه داده، بهتر است یک مثال را در نظر بگیریم. در MongoDB، یک سند عنصری است که حاوی داده‌هاست و مي‌توان آن را به نوعی با سطر(Row) در پایگاه‌هاي داده‌ای سنتی رابطه‌ای معادل دانست. در عبارت آورده شده زیر که با فرمت کلی JSON ارائه شده است، شاهد دو سند کاملاً متفاوت هستیم که به‌سادگی مي‌توانند در یک مجموعه منفرد با نام Media در یک پایگاه‌داده موجود در mongoDB ذخیره و مدیریت شوند:

{
“Type”: “CD”,
“Artist”: “Shajarian”,
“Title”: “Bidad”,
“Genre”: “Classic”,
“Releasedate”: “1991.09.24”,
“Tracklist”: [
{
“Track”: “1”,
“Title”: “Saz o Avaz”,
“Length”: “5:02”
},
{
“Track”: “2”,
“Title”: “Suz o godaz”,
“Length”: “4:15”
}
]
}
{
“Type”: “Magazine”,
“Title”: “Shabakeh (Network)”,
“ISSN”: “987-1-4302-3051-9”,
“Publisher”: “Asr e Shabakeh”,
“Authors”: [
“Izad Panah, Parham”,
“Nazari, Erfan”,
“Soltani, Qmars”
]
}

همان‌طور که مي‌بینید، دو سند مختلف با ساختاری متفاوت در کنار یکدیگر و در یک مجموعه (Collection) با نام Media ذخیره شده‌اند و قابل استفاده خواهند بود. شکل 4 نمایی از ساختار داده‌ای mongoDB و مقایسه آن با پایگاه‌هاي داده‌ رابطه‌ای را نشان مي‌دهد که برای درک بهتر mongoDB توجه به آن سودمند خواهد بود. در هر سند، مي‌توان از انواع داده‌ای مختلف مانندString ،Integer (32b & 64b) ،Boolean ،Double ،Array، Timestamp ،Object ،Null ،Symbol ،Date ،Object ID و Binary Data و حتی کد جاوااسکریپت (به‌عنوان یک نوع داده‌ای) استفاده کرد. چهار نوع داده‌اي آخر از انواع داده‌ای JSON نبوده و از آن‌ها به BSON تعبیر مي‌شود.
شکل 4- مدل داده‌ای mongoDB در مقایسه با مدل سنتی رابطه‌ای
' mongoDB علاوه بر فراهم‌سازی سهولت و انعطاف در ذخیره‌سازی داده‌ها، قابلیت‌هاي پیشرفته‌ای مانند کلاستر‌سازی، جایگزینی و MapReduce را نیز ارائه مي‌کند که وجود آن‌ها، قابلیت اعتماد و مقیاس‌پذیری بالا را برای آن به ارمغان آورده است."
مدیریت داده‌ها
پس از آشنایی کلی با مدل داده‌ای mongoDB‌، روش مدیریت آن‌ها از طریق پوسته پایگاه‌داده را مورد بررسی قرار خواهیم داد. همان‌طور که قبلاً نیز گفته شد، برای مشاهده پایگاه‌هاي داده‌ای موجود، از دستور show dbs استفاده مي‌شود که در صورت اجرای این دستور روی یک پایگاه‌داده تازه اجرا شده، جوابی مطابق با کد زیر برگردانده خواهد شد:
> show dbs
local (empty)
برای تولید یک مجموعه جدید در پایگاه‌داده حاضر، باید از دستور زیر استفاده کرد:
> db.createCollection(“Media”)
{“ok”: 1} توجه داشته باشید که در پوسته MongoDB، متغیر db به نام پایگاه‌داده جاری اشاره دارد که عملیات مربوطه در آن انجام مي‌شود. حال، برای افزودن یک سند به این مجموعه تازه ایجاد شده، باید از دستورات زیر استفاده کنيم:

> document = ({ “Type”: “CD”, “Artist”: “Shajarian”, “Title”: “Bidad”, “Genre”: “Classic”, “Releasedate”: “1991.09.24”, “Tracklist”: [ { “Track”: “1”, “Title”: “Saz o Avaz”, “Length”: “5:02” }, { “Track”: “2”, “Title”: “Suz o godaz”, “Length”: “4:15” } ]})
db.Media.insert(document)

هم‌اکنون، سند نخست به مجموعه Media اضافه شده و مي‌توان آن را مورد استفاده قرار داد. برای مشاهده داده‌هاي ذخیره‌شده در یک مجموعه به سادگی مي‌توان از دستور find به‌صورت زیر استفاده کرد. این دستور لیستی از سندهای موجود در مجموعه مورد نظر را بر‌خواهد گرداند:

> db.Media.find()
{ “_id” : ObjectId(“4c1a8a56c603000000007ecb”), “Type”: “CD”, “Artist”: “Shajarian”, “Title”: “Bidad”, “Genre»: “Classic”, “Releasedate”: “1991.09.24”, “Tracklist”: [
{
“Track”: “1”,
“Title”: “Saz o Avaz”,
“Length”: “5:02”
},
{
“Track”: “2”,
“Title”: “Suz o godaz”,
“Length”: “4:15”
}
]}

اما مي‌توان در تابع find، از پارامتر نیز استفاده کرد که به معنی برگرداندن اسنادی است که پارامتر مذکور در آن‌ها موجود است. به‌عنوان مثال، در صورتی که بخواهیم اسنادی را برگردانیم که حاوی Artist:”Shajarian” هستند، از این دستور استفاده مي‌کنیم که نتیجه اجرای آن نیز در ادامه آورده شده است:
> db.Media.find({Artist: “Shajarian”})
{ “_id” : ObjectId(“4c1a8a56c603000000007ecb”), “Type”: “CD”, “Artist”: “Shajarian”, “Title”: “Bidad”, “Genre”: “Classic”, “Releasedate”: “1991.09.24”, “Tracklist”: [
{
“Track”: “1”,
“Title”: “Saz o Avaz”,
“Length”: “5:02”
},
{
“Track”: “2”,
“Title”: “Suz o godaz”,
“Length”: “4:15”
}
]}

برای انجام پرس‌وجوهای پیچیده‌تر، مي‌توان چندین پارامتر مختلف را با هم به تابع find ارسال کرده و با استفاده از کارکتر «:»، دامنه جست‌وجو را به عبارت‌هاي جزئی‌تر و زیر مجموعه ببریم. همچنين، مي‌توان با استفاده از روش‌هاي sort‌، limit، skip و... در تابع find، نتایج جست‌وجو را بر‌اساس نیاز مرتب‌ کرده یا محدود کرد. پایگاه mongoDB ابزارهای مدیریتی بسیار سودمندی را ارائه مي‌کند که کنسول مورد استفاده ما تنها یکی از آن‌ها است. در سایت mongoDB مي‌توانید بخشی را تحت‌عنوان Admin+UIs بیابید که به معرفی انواع ابزارها برای مدیریت این پایگاه‌داده مي‌پردازد. یک رابط مدیریتی تحت وب همانند PHPMyAdmin از جمله این ابزارهای سودمند است. همچنين، یک ابزار درونکار گزارش‌‌دهی نیز در این پایگاه‌داده در نظر گرفته‌شده است که با وارد‌کردن آدرس فقط کاربران ثبت نام شده میتوانند لینک های انجمن را مشاهده کنند. ] در نوار‌آدرس مرورگر ماشین اجرا‌کننده mongoDB به نمایش در مي‌آید. شکل۵ نمونه‌ای از این ابزار گزارش‌دهی را نشان مي‌دهد.

شکل 5- رابط تحت وب مانیتورینگ و تهیه گزارش از وضعیت کاری MongoDB