گزینه‌های بیشتر برای تنظیم سرور MongoDB

More Options for Setting up A MongoDB Server

02 اسفند 1400
درسنامه درس 27 از سری دوره جامع آموزش MongoDB
MongoDB: گزینه های بیشتر برای تنظیم سرور MongoDB (قسمت 27)

در جلسه قبل با flag های دستور mongod آشنا شدیم و می دانیم که برای مشاهده آن ها باید دستور زیر را اجرا کنیم:

mongod --help

همچنین در همان جلسه در مورد Flag های port و quiet و logpath و dbpath صحبت کردیم. این جلسه ادامه جلسه قبل است و می خواهیم با موارد بیشتری از flag های mongod آشنا شویم. البته همانطور که گفتم وقت نخواهیم کرد که با همه آن ها آشنا شویم و از کنار برخی به سرعت عبور می کنیم.

Flag بعدی ما WiredTiger Options نام دارد که مربوط به گزینه های WiredTiger است. در جلسات اول این دوره به صورت خلاصه اشاره کردم که WiredTiger موتور ذخیره سازی داده ها در MongoDB است و موتور های ذخیره سازی دیگری نیز وجود دارد اما معمولا از WiredTiger استفاده می شود. گزینه های این قسمت پیچیده هستند و معمولا به توسعه دهندگان وب مربوط نمی شوند (معمولا مربوط به افرادی است که ادمین سرور و پایگاه داده هستند و وظیفه پیکربندی سرور برای مشتریان خود را بر عهده دارند). مثلا یکی از گزینه های این قسمت wiredTigerCacheSizeGB است که حداکثر مقدار فضا برای کش (cache) داخلی WiredTiger را مشخص می کند و  می تواند مقداری بین 0.25 گیگابایت تا10000  گیگابایت را قبول کند. اگر دوست دارید با این موارد فنی آشنا شوید می توانید به documentation رسمی آن مراجعه کنید.

Flag بعدی repair است که باید در مواقع اشکال و خطا در کار با پایگاه داده اجرا شود. Repair سعی می کند مشکلات را تصحیح کند و هر داده ای را که قابل بازیابی نباشد، حذف خواهد کرد بنابراین باید حواستان را جمع کنید؛ تا جایی که ممکن است اجرای mongod --repair را به عنوان آخرین گزینه خود قرار دهید چرا که اگر داده هایتان صدمه دیده باشند و repair نتواند آن ها را بازیابی کند، به طور کل حذف خواهند شد. پیشنهاد من این است که همیشه قبل از اجرای repair از پوشه db (یا هر مسیری که پایگاه داده در آن ذخیره شده است) یک کپی بگیرید. این کار نیاز به عملیات خاصی ندارد و فقط باید این پوشه را در مسیر دیگری کپی کنید تا اگر داده هایتان حذف شد، بتوانید آن ها را برگردانید. به عنوان نکته آخر باید بدانید که repair تمام index ها را دوباره می سازد.

Flag بعدی directoryperdb است. در حال حاضر اگر به پوشه db خود نگاه کنید، متوجه بی نظمی خاصی در آن می شوید چرا که تمام فایل ها در db ریخته شده اند و از هم قابل تشخیص نیستند. شما می توانید با اجرای directoryperdb روی پایگاه داده خود کاری کنید که درون پوشه db برای هر کدام از پایگاه های داده شما یک پوشه جدید تعریف شود و فایل هایش درون آن قرار بگیرد نه اینکه همه چیز در هم و یکجا باشند. برای این کار باید:

  1. در حالی که mongod در حال اجرا است، دستورmongodump  را اجرا نمایید تا یک بکاپ از سرور شما گرفته شود.
  2. Mongod را غیر فعال کنید تا در حال اجرا نباشد (کلید های Ctrl + C در ترمینال).
  3. حالا باید یک سرور جدید بسازیم. این بار هنگام ساخت یک mongod جدید باید پس از مشخص کردن مسیر db، پرچم directoryperdb-- را نیز در انتهای دستور نهایی قرار دهید و سپس آن را اجرا کنید تا یک data directory جدید بسازید (data directory یعنی مسیر ذخیره سازیِ سرور شما که برای ما همان پوشه db بود اما این بار باید یک مسیر جدید را مشخص کنیم).
  4. یک بار دیگر mongod را اجرا کنید.
  5. دستور mongorestore را اجرا نمایید تا بکاپ گرفته شده را وارد سرور جدید خود کنید.

Flag بعدی ما storageEngine است که با استفاده از آن می توانید storage engine (موتور ذخیره سازی پایگاه داده) را تغییر دهید. همانطور که می دانید موتور پیش فرض همان wiredTiger است اما می توانید inMemory را هم انتخاب کنید (شدیدا پیشنهاد می شود که از wiredTiger استفاده نمایید). در ضمن موتور MMAPv1 از نسخه 4.2 به بعد MongoDB کاملا منسوخ شده است.

نکته: شما می توانید هنگام استفاده از دستور mongod تمام این flag ها را با هم بیاورید و نباید آن ها را تک تک و جداگانه اجرا کنید. به طور مثال:

Mongod --dbpath --logpath --storageEngine "wiredTiger"

Fork برای کاربران مک و لینوکس

یکی دیگر از Flag های مهم، fork است که فقط برای کاربران مک و لینوکس کار می کند (در مورد کاربران ویندوز بعدا صحبت می کنیم). اگر mongod را به شکل زیر اجرا کنیم چه اتفاقی می افتد؟

Mongod --fork

با اجرای کد بالا دچار خطا می شویم و سرور به ما می گوید که حتما باید logpath را مشخص نماییم. بنابراین برای حل این مشکل دستور زیر را اجرا می کنم:

Mongod --fork --logpath /Users/Amir/development/mongodb/logs/log.log

شما می توانید هر مسیر دیگری را برای logpath انتخاب کنید. حالا با اجرای این کد پیام زیر به شما نمایش داده می شود:

Child process started successfully, parent exiting.

یعنی سرور ما به صورت یک process در مک و لینوکس اجرا شد (دقیقا همان چیزی که با نام service در ویندوز داشتیم). بنابراین حتی اگر پنجره ترمینال را ببندیم و دستور mongo (نه mongod) را در یک ترمینال جدید اجرا کنیم، مستقیما به Shell متصل می شویم. به عبارتی دیگر نیازی به باز نگه داشتن پنجره ترمینال نداریم. به همین دلیل بود که fork از ما می خواست حتما logpath را مشخص کنیم. از آنجایی که دیگر به ترمینال نیازی نداریم، پیام ها را در این فایل log ذخیره خواهد کرد.

برای خاموش کردن این سرویس باید به روشی که می گویم عمل کنید. ابتدا بگویید:

use admin

با این کار به پایگاه داده admin متصل می شویم. سپس می گوییم:

db.shutdownServer()

حالا سرویس (سرور ما) قطع می شود.

از ابتدا این دوره توضیح داده بودم که کاربران ویندوز اگر به تنظیمات MongoDB در هنگام نصب (جلسات اول) دست نزده باشند، MongoDB به صورت یک سرویس همیشه در حال اجرا خواهد بود و دیگر نیازی به اجرای mongod نخواهیم داشت. البته برای اجرای دستی آن در command prompt می توان گفت:

net start MongoDB

برای متوقف کردن آن می توان از همان db.shutdownServer یا کد زیر استفاده کرد:

net stop MongoDB
تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری دوره جامع آموزش MongoDB توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مقالات مرتبط
آخرین سوالات کاربران
5451218 در 3 سال قبل پرسیده:
ما را دنبال کنید
اینستاگرام روکسو تلگرام روکسو ایمیل و خبرنامه روکسو