post title

MongoDB چیست؟ کاربردها، مزایا و آموزش دیتابیس مانگو دی بی

MongoDB یک پایگاه داده NoSQL سند محور است که اطلاعات را در قالب سندهایی شبیه JSON نگه می‌دارد. این ساختار برای برنامه‌هایی کاربرد دارد که داده‌های متنوع دارند و نیازهایشان مرتب تغییر می‌کند. اما انعطاف بیشتر به‌معنی کنارگذاشتن طراحی دیتابیس نیست؛ اتفاقا مدل اشتباه، هزینه خود را هنگام افزایش داده‌ها نشان می‌دهد. در این مقاله […]

MongoDB چیست؟ کاربردها، مزایا و آموزش دیتابیس مانگو دی بی

توییتر تلگرام

MongoDB یک پایگاه داده NoSQL سند محور است که اطلاعات را در قالب سندهایی شبیه JSON نگه می‌دارد. این ساختار برای برنامه‌هایی کاربرد دارد که داده‌های متنوع دارند و نیازهایشان مرتب تغییر می‌کند. اما انعطاف بیشتر به‌معنی کنارگذاشتن طراحی دیتابیس نیست؛ اتفاقا مدل اشتباه، هزینه خود را هنگام افزایش داده‌ها نشان می‌دهد. در این مقاله از مجله پارس هاست، ساختار MongoDB، ویژگی‌ها، کاربردها و تفاوت آن با MySQL را بررسی می‌کنیم و سراغ نصب و چند دستور عملی می‌رویم. برای شناخت دقیق‌تر این دیتابیس، همراه ما باشید.

مونگو دی بی (MongoDB) چیست؟

دیتابیس MongoDB اطلاعات را به‌جای ردیف‌ها و ستون‌های جدول، داخل سندهای منعطف ذخیره می‌کند. هر سند مجموعه‌ای از فیلدها و مقدارهاست؛ مثلا نام مشتری، شماره تماس، آدرس و فهرست علاقه‌مندی‌های او.

عنوان NoSQL به خانواده‌ای از پایگاه‌های داده اشاره دارد که مدل رابطه‌ای سنتی، مبنای اصلی ساختارشان نیست. البته این عنوان به‌معنی نداشتن رابطه میان داده‌ها یا پشتیبانی‌ نکردن از تراکنش نیست.

برای شناخت اجزای MongoDB، این تفاوت‌ها را در نظر بگیرید:

  • MongoDB Server: موتور اصلی ذخیره‌سازی و پردازش درخواست‌ها.
  • MongoDB Shell یا mongosh: محیط اجرای دستورها.
  • MongoDB Compass: رابط گرافیکی مشاهده و مدیریت داده‌ها.
  • MongoDB Atlas: سرویس ابری مدیریت دیتابیس.

نصب Compass به‌تنهایی یک سرور دیتابیس راه نمی‌اندازد؛ این ابزار به سرور محلی یا راه دور متصل می‌شود.

MongoDB چگونه کار می‌کند؟

برنامه از طریق درایور زبان برنامه‌نویسی به MongoDB متصل می‌شود. سپس درخواست ثبت، خواندن، ویرایش یا حذف اطلاعات را می‌فرستد. سرور درخواست را پردازش می‌کند و نتیجه را برمی‌گرداند.

مدل داده باید با شیوه دسترسی برنامه هماهنگ باشد. مثلا وقتی برنامه همیشه مشخصات کالا و ویژگی‌های آن را کنار هم می‌خواند، نگهداری این اطلاعات در یک سند منطقی است. اما قرار دادن تمام سفارش‌های یک مشتری داخل سند او، با رشد سفارش‌ها دردسر ایجاد می‌کند.

۱. مسیر درخواست در کلاستر شاردشده MongoDB

در این معماری، برنامه مستقیما با تک‌تک سرورهای ذخیره‌سازی ارتباط نمی‌گیرد. درخواست ابتدا به مسیریاب می‌رسد و سپس به بخش مرتبط هدایت می‌شود. اجزای تصویر این وظایف را دارند:

  • برنامه کاربر (Client Application): درخواست خواندن یا نوشتن اطلاعات را از طریق درایور MongoDB ارسال می‌کند.
  • مسیریاب درخواست (mongos): درخواست را دریافت می‌کند و تشخیص می‌دهد کدام Shard یا Shardها باید آن را پردازش کنند. سپس نتیجه را به برنامه برمی‌گرداند.
  • سرورهای پیکربندی (Config Servers): اطلاعات ساختار کلاستر و محل توزیع داده‌ها را نگه می‌دارند. مسیریاب از این اطلاعات برای هدایت درخواست‌ها استفاده می‌کند.
  • شاردها (Shards): هر شارد بخشی از داده‌ها را نگه می‌دارد. در تصویر، هر شارد یک Replica Set شامل یک Primary و دو Secondary دارد؛ Primary نوشتن‌ها را دریافت می‌کند و Secondaryها تغییرات را دنبال می‌کنند.

MongoDB چگونه کار می‌کند؟

فرض کنید اطلاعات محصولات فروشگاه میان سه شارد توزیع است. اگر فیلتر درخواست، اطلاعات لازم از کلید شارد را داشته باشد، mongos ممکن است فقط شارد مرتبط را هدف بگیرد. در غیر این صورت، احتمال دارد درخواست را به چند شارد بفرستد و پاسخ‌ها را ترکیب کند.

نکته: سرورهای پیکربندی در مسیر انتقال محتوای اصلی درخواست به شاردها قرار ندارند. mongos اطلاعات مسیریابی را کش می‌کند؛ بنابراین برای هر درخواست، مراجعه تازه به Config Servers لازم نیست.

۲٫ Document و Collection در MongoDB چیست؟

Document واحد اصلی داده و Collection مجموعه‌ای از سندهاست. هر دیتابیس نیز چند Collection دارد؛ برای نمونه، فروشگاه اینترنتی مجموعه‌های products، customers و orders را نگه می‌دارد.

سند زیر مشخصات یک کالای فرضی را نمایش می‌دهد:

{

“name”: “VPS Basic”,

“price”: 450000,

“specs”: {

“ramGB”: 4,

“storageGB”: 80

},

“locations”: [“Iran”, “Germany”]

}

Document و Collection در MongoDB چیست؟

در این مثال، specs سند توکار و locations آرایه است. در Collection استاندارد، فیلد _id شناسه یکتای هر سند را مشخص می‌کند. اگر آن را تعیین نکنید، درایور یا سرور معمولا یک ObjectId می‌سازد.

۳٫ تفاوت JSON و BSON در ذخیره‌سازی داده‌ها

JSON قالبی متنی برای نمایش و تبادل داده است. MongoDB اطلاعات را با BSON نگه می‌دارد؛ قالبی دودویی که علاوه‌بر ساختارهای JSON، نوع‌هایی مانند تاریخ، داده باینری و ObjectId دارد.

وب‌سایت رسمی MongoDB درباره قالب ذخیره‌سازی توضیح می‌دهد:

“MongoDB stores data records as BSON documents.”

«MongoDB رکوردهای داده را در قالب سندهای BSON ذخیره می‌کند.»

بنابراین، کدی که در مثال بالا می‌بینید نمایش خوانای اطلاعات است، نه نمایش مستقیم بایت‌های BSON روی دیسک.

مهم‌ترین ویژگی‌های MongoDB

ویژگی‌های MongoDB زمانی ارزش دارند که با نیاز برنامه هماهنگ باشند. سه قابلیت زیر، بخش مهمی از معماری این دیتابیس را تشکیل می‌دهند.

۱. ساختار منعطف داده‌ها

سندهای یک Collection الزاما فیلدهای یکسان ندارند. مثلا سند لپ‌تاپ مشخصات پردازنده دارد و سند لباس، اندازه و جنس پارچه.

بااین‌حال، ساختار منعطف مجوز بی‌نظمی نیست. برای فیلدهایی مانند قیمت، ایمیل و وضعیت سفارش، نوع و قواعد مشخص تعیین کنید. قابلیت Schema Validation نیز ورود داده نامعتبر را محدود می‌کند. این کنترل کمک می‌کند یک برنامه قیمت را عدد و برنامه دیگر همان قیمت را رشته متنی ثبت نکند. 

مهم‌ترین ویژگی‌های MongoDB

۲. مقیاس‌پذیری با Sharding

Sharding داده‌های یک Collection را میان چند Shard توزیع می‌کند. این روش زمانی کاربرد دارد که ظرفیت ذخیره‌سازی یا توان پردازشی یک سرور پاسخگوی بار کاری نباشد.

انتخاب Shard Key اهمیت زیادی دارد؛ چون نحوه توزیع داده و مسیریابی درخواست‌ها به آن وابسته است. کلید نامناسب ممکن است فشار را روی بخشی از کلاستر متمرکز کند. پس شاردینگ را راه‌حل فوری هر کندی ندانید؛ ابتدا کوئری‌ها، ایندکس‌ها و منابع سرور را بررسی کنید.

۳. دسترس‌پذیری بالا با Replication

در Replica Set، چند عضو نسخه‌ای از داده‌ها را نگه می‌دارند. عضو Primary نوشتن‌ها را دریافت می‌کند و اعضای Secondary تغییرات را دنبال می‌کنند. اگر Primary از دسترس خارج شود، اعضای واجد شرایط با رعایت شرایط انتخاب، Primary جدید تعیین می‌کنند.

در مستندات رسمی MongoDB آمده است:

“A replica set is a group of mongod instances that maintain the same data set.”

«Replica Set گروهی از نمونه‌های mongod است که مجموعه داده یکسانی را نگه می‌دارند.» 

نکته: Replication جای بکاپ را نمی‌گیرد. حذف اشتباه اطلاعات هم ممکن است به اعضای دیگر منتقل شود؛ پس برنامه پشتیبان‌گیری مستقل لازم است.

MongoDB چه کاربردهایی دارد؟

MongoDB برای اطلاعات نیمه‌ساختاریافته و مدل‌هایی با ویژگی‌های متنوع کاربرد دارد. چند نمونه ملموس عبارت‌اند از:

  • کاتالوگ فروشگاه با مشخصات متفاوت برای هر گروه محصول.
  • پروفایل کاربران با تنظیمات و ترجیح‌های اختصاصی.
  • سامانه مدیریت محتوا با انواع مختلف نوشته و محتوا.
  • ثبت رویدادهای برنامه و داده‌های عملیاتی با ساختار متغیر.

برای نمونه، در یک فروشگاه فرضی، کتاب فیلد نویسنده دارد و گوشی فیلد ظرفیت باتری. مدل سندمحور نگهداری این تفاوت‌ها را ساده‌تر می‌کند. بااین‌حال، تعداد کاربران یا حجم اطلاعات به‌تنهایی دلیل انتخاب MongoDB نیست؛ الگوی خواندن، نوشتن و روابط داده‌ها هم تعیین‌کننده‌اند.

مزایا و معایب MongoDB چیست؟

مزیت اصلی MongoDB، هماهنگی مدل سندی با بسیاری از ساختارهای برنامه‌نویسی است. اما این هماهنگی، هزینه طراحی و نگهداری را حذف نمی‌کند.

مزایا و معایب MongoDB چیست؟

مهم‌ترین مزایا و محدودیت‌ها را کنار هم ببینید:

مزایا محدودیت‌ها و ملاحظات
تغییر تدریجی ساختار سندها نیاز به کنترل نوع و کیفیت داده
نگهداری اطلاعات مرتبط کنار هم احتمال تکرار داده در مدل نامناسب
پشتیبانی از ایندکس و تجمیع داده مصرف فضا و هزینه نوشتن برای ایندکس‌ها
توسعه افقی با شاردینگ پیچیدگی بیشتر مدیریت کلاستر
پشتیبانی از تراکنش چند سندی نیاز به استقرار و تنظیمات مناسب

MongoDB عملیات روی یک سند را به‌صورت اتمیک اجرا می‌کند؛ یعنی تغییرات آن عملیات، یکپارچه اعمال می‌شوند. برای عملیات مرتبط میان چند سند نیز تراکنش دارد، اما تراکنش چند سندی به Replica Set یا کلاستر شاردشده نیاز دارد. پس عبارت «MongoDB تراکنش ندارد» درست نیست.

تفاوت MongoDB و MySQL چیست؟

تفاوت اصلی این دو دیتابیس به مدل داده و شیوه کار با روابط برمی‌گردد. هیچ‌کدام در تمام پروژه‌ها سریع‌تر یا مناسب‌تر نیستند.

جدول زیر معیارهای اولیه انتخاب را نشان می‌دهد:

معیار MongoDB MySQL
مدل اصلی سندمحور رابطه‌ای و جدولی
زبان رایج درخواست MQL و Aggregation Pipeline SQL
ساختار داده فیلدهای منعطف با امکان اعتبارسنجی ستون‌ها و نوع‌های مشخص
مدیریت روابط سند توکار، ارجاع و $lookup کلید خارجی و JOIN
تراکنش تک‌سندی و چند سندی با شرایط لازم پشتیبانی گسترده با InnoDB
تناسب رایج داده متنوع و دسترسی سندی روابط پررنگ و ساختار جدولی

برای شناخت زبان درخواست‌های دیتابیس رابطه‌ای، مقاله SQL چیست را بخوانید.  MySQL با موتور InnoDB از تراکنش و کلید خارجی پشتیبانی می‌کند. این قابلیت‌ها برای سامانه‌هایی که سازگاری روابط داده‌ها اهمیت زیادی دارد، کاربرد دارند. در مقابل، MongoDB امکان نگهداری بخش‌هایی از اطلاعات مرتبط در یک سند را می‌دهد.

اگر گزارش‌های شما مرتب چندین جدول مرتبط را ترکیب می‌کنند، مدل رابطه‌ای را جدی بررسی کنید. اگر برنامه بیشتر یک موجودیت کامل و ویژگی‌های متغیر آن را می‌خواند، مدل سندی ارزش آزمایش دارد.

آموزش نصب و راه‌اندازی MongoDB

برای شروع آزمایشی، داکر (Docker) مسیر کوتاهی است. ابتدا Docker و mongosh را نصب کنید. سازگاری سیستم‌ عامل، پردازنده و نسخه انتخابی را نیز بررسی کنید.

۱. اجرای سرور آزمایشی

فرمان زیر کانتینر MongoDB را اجرا می‌کند، داده‌ها را در Volume نگه می‌دارد و پورت را فقط روی آدرس محلی میزبان باز می‌کند:

docker run -d –name mongodb-lab -p 127.0.0.1:27017:27017 -v mongodb_lab_data:/data/db mongodb/mongodb-community-server:latest

آموزش نصب و راه‌اندازی MongoDB

این نمونه برای تمرین محلی است و احراز هویت ندارد. برای محیط عملیاتی، نسخه مشخص، احراز هویت، دسترسی شبکه محدود و برنامه بکاپ لازم است؛ از برچسب متغیر latest برای استقرار قابل‌تکرار استفاده نکنید.

۲. اتصال و بررسی سرویس

پس از اجرای کانتینر، با فرمان زیر به سرور محلی متصل شوید:

mongosh “mongodb://127.0.0.1:27017”

سپس پاسخ‌گویی سرور را بررسی کنید:

db.runCommand({ ping: 1 })

وجود ok: 1 در پاسخ، موفقیت این درخواست را نشان می‌دهد. این آزمایش، کیفیت عملکرد یا آمادگی محیط برای استفاده عملیاتی را اثبات نمی‌کند.

اتصال و بررسی سرویس

۳. مشاهده اطلاعات در Compass

در MongoDB Compass همان آدرس اتصال را وارد کنید. سپس دیتابیس‌ها، Collectionها و سندها را ببینید. بخش‌های مشاهده سند، فیلتر و مدیریت ایندکس برای شروع کاربرد دارند. پیش از هر ویرایش یا حذف، نام دیتابیس و محیط اتصال را کنترل کنید.

مشاهده اطلاعات در Compass

دستورات اولیه MongoDB با مثال عملی

مثال‌های این بخش برای محیط تمرینی هستند. ابتدا در mongosh دیتابیس آزمایشی را انتخاب کنید:

use hosting_demo

دستور use فقط دیتابیس فعال را انتخاب می‌کند. در این مثال، MongoDB با اولین درج موفق سند، دیتابیس و Collection را ایجاد می‌کند

۱. ثبت و خواندن اطلاعات

دستور زیر یک پلن فرضی را در مجموعه محصولات ثبت می‌کند:

db.products.insertOne({

name: “VPS Basic”,

ramGB: 4,

active: true

})

برای یافتن محصولات فعال با حداقل چهار گیگابایت رم، این فیلتر را اجرا کنید:

db.products.find({

active: true,

ramGB: { $gte: 4 }

})

عملگر $gte به‌معنی «بزرگ‌تر یا مساوی» است.

ثبت و خواندن اطلاعات

۲. ویرایش و حذف اطلاعات

فرمان زیر مقدار رم اولین محصول مطابق فیلتر را تغییر می‌دهد:

db.products.updateOne(

{ name: “VPS Basic” },

{ $set: { ramGB: 8 } }

)

برای حذف همان محصول آزمایشی، این دستور را اجرا کنید:

db.products.deleteOne({ name: “VPS Basic” })

در پروژه واقعی، برای هدف‌گیری دقیق از شناسه یکتا استفاده کنید؛ نام محصول لزوما یکتا نیست.

۳. ساخت ایندکس

اگر برنامه مرتب روی ramGB فیلتر می‌کند، ایندکس مناسب را بررسی کنید. دستور زیر ایندکس صعودی این فیلد را می‌سازد:

db.products.createIndex({ ramGB: 1 })

ایندکس همیشه رایگان نیست! هر ایندکس فضا مصرف می‌کند و هنگام تغییر اطلاعات، هزینه نگهداری دارد. بنابراین ایندکس متناسب با کوئری بسازید؛ نه برای تمام فیلدها.

ساخت ایندکس

چه زمانی MongoDB انتخاب مناسبی است؟

زمانی MongoDB را بررسی کنید که داده‌های متنوع دارید، دسترسی برنامه حول سندها شکل می‌گیرد و تیم شما توان مدیریت آن را دارد.

پیش از انتخاب نهایی، پاسخ این پرسش‌ها را مشخص کنید:

  • برنامه بیشتر چه اطلاعاتی را کنار هم می‌خواند؟
  • کدام عملیات به تراکنش چندسندی نیاز دارند؟
  • رشد داده و تعداد درخواست‌ها چقدر است؟
  • چه کسی امنیت، بکاپ و بازیابی را مدیریت می‌کند؟

برای استقرار مستقل MongoDB، به منابع کافی و دسترسی مدیریتی نیاز دارید. پیش از خرید سرور مجازی لینوکس، سازگاری نسخه MongoDB با سیستم‌عامل، ظرفیت رم، فضای ذخیره‌سازی و امکان ارتقای منابع را بررسی کنید.

پیش از انتقال داده واقعی، مانیتورینگ را فعال کنید

مانیتورینگ MongoDB را به زمان بروز مشکل موکول نکنید. زمان پاسخ کوئری‌ها، مصرف حافظه، فضای دیسک، تعداد اتصال‌ها و تاخیر Replication را زیر نظر بگیرید.

ابزار mongostat آمار عملیات را نمایش می‌دهد و mongotop فعالیت خواندن و نوشتن Collectionها را گزارش می‌کند. این ابزارها در بسته MongoDB Database Tools قرار دارند. برای شروع، یک خط مبنا از وضعیت عادی بسازید تا تغییرهای غیرعادی را تشخیص دهید.

سوالات متداول درباره MongoDB

۱. MongoDB چیست و چه تفاوتی با دیتابیس رابطه‌ای دارد؟

MongoDB یک پایگاه داده سندمحور است. اطلاعات را در سندها نگه می‌دارد؛ دیتابیس رابطه‌ای عمدتا از جدول‌ها و روابط میان آن‌ها استفاده می‌کند.

۲. آیا برای استفاده از MongoDB باید Node.js بدانم؟

خیر. MongoDB درایورهای مختلفی دارد و به Node.js محدود نیست. زبان برنامه‌نویسی را براساس نیاز پروژه انتخاب کنید.

۳. آیا هاست اشتراکی معمولی برای MongoDB کافی است؟

فقط زمانی که سرویس‌دهنده صریحا از آن پشتیبانی کند. نصب مستقل سرور دیتابیس معمولا به دسترسی و منابعی فراتر از هاست اشتراکی نیاز دارد.

۴. آیا MongoDB همیشه از MySQL سریع‌تر است؟

خیر. مدل داده، ایندکس‌ها، نوع درخواست، سخت‌افزار و تنظیمات روی نتیجه اثر دارند. مقایسه معتبر به آزمایش با بار کاری واقعی نیاز دارد.

مطالب پیشنهادی

برای نصب MongoDB روی ویندوز، ابتدا نسخه سازگار با سیستم‌ عامل خود را دانلود کنید، فایل نصب Community Server را اجرا کنید و سپس با MongoDB Compass یا mongosh به دیتابیس متصل شوید. البته نسخه‌های جدید MongoDB Server از ویندوز ۱۰ پشتیبانی رسمی ندارند و برای نصب روی این سیستم‌ عامل باید محدودیت سازگاری نسخه‌ها […]

۲۰۲۶/۱۰/۲۷
۰

یک فروشگاه اینترنتی برای نمایش محصولات، ورود کاربران و ثبت سفارش با پایگاه داده ارتباط دارد. اگر برنامه ورودی کاربران را بدون جداسازی از دستورهای SQL وارد پرس‌وجو کند، مهاجم ممکن است منطق درخواست را تغییر دهد. این آسیب‌پذیری را SQL Injection یا تزریق SQL می‌نامند. برای درک اینکه SQL Injection چیست، باید تفاوت «داده […]

۲۰۲۶/۱۰/۲۷
۰

SQL Server یک سیستم مدیریت پایگاه داده رابطه‌ای (RDBMS) محصول مایکروسافت است که اطلاعات نرم‌افزارها و وب‌سایت‌ها را ذخیره، پردازش و مدیریت می‌کند. این نرم‌افزار از زبان SQL برای اجرای پرس‌وجوها استفاده می‌کند و قابلیت‌هایی مانند مدیریت تراکنش‌ها، کنترل دسترسی و پشتیبان‌گیری دارد. البته SQL Server فقط یک محل ذخیره اطلاعات نیست؛ امکانات آن برای […]

۲۰۲۶/۱۰/۲۰
۰

گاهی سایت از نظر منابع سرور وضعیت خوبی دارد، CPU زیر فشار نیست و فضای RAM هم کافی به‌نظر می‌رسد، اما بازشدن بعضی صفحه‌ها چند ثانیه طول می‌کشد. اینجا یکی از مواردی که باید سراغش بروید، کوئری‌های کند MySQL است. ماجرا وقتی جدی‌تر می‌شود که حجم دیتابیس بالا برود یا چند کاربر هم‌زمان درخواست ارسال […]

۲۰۲۶/۱۰/۱۹
۰

SQL یک زبان استاندارد برای کار با پایگاه داده‌های رابطه‌ای است که به کمک آن اطلاعات را ذخیره، جستجو، ویرایش و حذف می‌کنیم. از مدیریت اطلاعات کاربران یک وب‌سایت بگیریم تا پردازش سفارش‌های فروشگاه اینترنتی، SQL در بسیاری از سیستم‌های نرم‌افزاری حضور دارد. اما آیا SQL خودش یک نرم‌افزار است یا زبانی که نرم‌افزارهای مختلف […]

۲۰۲۶/۱۰/۱۹
۰
۰ نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *