اصول MongoDB (قسمت 1)

MongoDB چیست؟
MongoDB یک پایگاه داده NoSQL سند گرا است که داده ها را در اسناد JSON منعطف ذخیره می کند. این انعطافپذیری، همراه با مقیاسپذیری و قابلیتهای جستجو، آن را به گزینهای محبوب برای برنامههای کاربردی مدرن که با دادههای متنوع و به سرعت در حال تغییر سر و کار دارند، تبدیل میکند.
سیستم مدیریت پایگاه داده رابطه ای در مقابل MongoDB
اگر قبلاً با یک سیستم مدیریت پایگاه داده رابطه ای (RDBMS) کار کرده باشید، بسیار قابل انتقال به MongoDB خواهد بود. نمودار زیر مفاهیمی را که اغلب در RDBMS و همتایان آن ها در MongoDB استفاده می شود را نشان می دهد.
معماری استقرار
سه گزینه برای استقرار MongoDB وجود دارد: معماری های مستقل، تکراری و به اشتراک گذاری.
1) معماری مستقل
فقط یک سرور (به عنوان مثال، مستقل) وجود دارد.
مزایای:
سادگی، نیاز کمتر به منابع و زمان راه اندازی سریعتر.
معایب:
بدون در دسترس بودن بالا، مقیاس پذیری محدود و بدون تحمل خطا. به طور خاص، اگر سرور میزبان پایگاه داده خراب شود یا داده ها خراب شود، ممکن است تمام داده های خود را از دست بدهید. هیچ مکانیزم داخلی برای افزونگی یا بازیابی داده ها وجود ندارد.
2) معماری تکرار
داده ها از سرور اصلی در چندین سرور ثانویه تکثیر می شوند. اگر سرور اصلی در مجموعه از کار بیفتد، می توان به طور خودکار یک عضو دیگر (ثانویه) انتخاب و ارتقاء داد تا به عنوان اصلی انتخاب شود، تا زمان خرابی به حداقل برسد و اطمینان حاصل شود که داده ها در دسترس باقی می مانند.
مزایای:
در دسترس بودن بالا، مقیاس پذیری خواندن بهبود یافته (یعنی داده ها را می توان از سرورهای ثانویه خواند، مشکل گلوگاه را کاهش می دهد)، بازیابی فاجعه (یعنی، داده ها را می توان از یک سرور ثانویه باقیمانده همانطور که در بالا ذکر شد بازیابی کرد).
معایب:
پیچیدگی و هزینه های سخت افزاری بالاتر در مقایسه با معماری مستقل.
3) معماری شاردینگ
Sharding امکان مقیاس افقی پایگاه داده را با افزودن سرورهای خرده بیشتر فراهم می کند. این برای مدیریت مجموعه داده های عظیم و توان بالای نوشتن/خواندن که یک سرور نمی تواند مدیریت کند، ایده آل است.
مزایای:
مقیاس پذیری افقی، عملکرد بهبود یافته برای پرس و جوهای خاص (یعنی فقط خرده(های) مربوطه باید برای پرس و جو قابل دسترسی باشد)، و انعطاف پذیری (یعنی مقیاس مستقل بخش های مختلف پایگاه داده).
معایب:
افزایش پیچیدگی، سربار عملکرد بالقوه و توزیع نابرابر داده ها و تنگناها.
آنچه من یک MongoDB را از دید توسعه دهنده قبلی خود می بینم
اعتراف میکنم که قبلاً فقط بر روی ایجاد یک پیکربندی صحیح برای دادههای جاری به پایگاه داده (یعنی واکشی دادههای مناسب برای مجموعه، فیلد و سند مناسب) بدون درک معماری پایگاه داده تمرکز میکردم، همانطور که در زیر نشان داده شده است.
با این حال، من معتقدم که داشتن درک کامل از پایگاه های داده بسیار سودمند خواهد بود. سپس، میتوانم درخواستهایم را بهینه کنم. بنابراین، من در مورد پایگاه های داده بیشتر یاد می گیرم.
هنگام پرس و جو چه اتفاقی می افتد
ابتدا باید بدانیم که عملیات پرس و جو ما در حافظه پایگاه داده اتفاق می افتد و کاربران (یعنی توسعه دهندگان) اغلب با حافظه تعامل دارند. اگر پایگاه داده خود را یک خودرو در نظر بگیریم، حافظه پایگاه داده موتور است. موتور ذخیره سازی اعمال شده برای حافظه پایگاه داده و طراحی توزیع داده ها در ذخیره سازی فیزیکی به شدت بر عملکرد پایگاه داده ما تأثیر می گذارد. WiredTiger و In-Memory دو موتور ذخیره سازی متداول هستند.
برای بررسی موتور ذخیره سازی، دستور زیر را تایپ کنید.
db.serverStatus().storageEngine
تصویر زیر یک معماری معمولی از یک موتور ذخیره سازی WiredTiger را نشان می دهد. این یک درک اساسی از معماری پایگاه داده WiredTiger ارائه می دهد.
ممنون که تا اینجا خوندید
هوآنگ
P/S: در قسمت 2، نمونه ای از بهینه سازی یک پرس و جو در MongoDB را می نویسم.