در جلسه قبل با 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 برای هر کدام از پایگاه های داده شما یک پوشه جدید تعریف شود و فایل هایش درون آن قرار بگیرد نه اینکه همه چیز در هم و یکجا باشند. برای این کار باید:
Flag بعدی ما storageEngine است که با استفاده از آن می توانید storage engine (موتور ذخیره سازی پایگاه داده) را تغییر دهید. همانطور که می دانید موتور پیش فرض همان wiredTiger است اما می توانید inMemory را هم انتخاب کنید (شدیدا پیشنهاد می شود که از wiredTiger استفاده نمایید). در ضمن موتور MMAPv1 از نسخه 4.2 به بعد MongoDB کاملا منسوخ شده است.
نکته: شما می توانید هنگام استفاده از دستور mongod تمام این flag ها را با هم بیاورید و نباید آن ها را تک تک و جداگانه اجرا کنید. به طور مثال:
Mongod --dbpath --logpath --storageEngine "wiredTiger"
یکی دیگر از 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
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.