کارایی راحت‌تر با فایل پیکربندی MongoDB

Easier Performance with MongoDB Configuration File

02 اسفند 1400
درسنامه درس 28 از سری دوره جامع آموزش MongoDB
MongoDB: کارایی راحت تر با فایل پیکربندی MongoDB (قسمت 28)

تا اینجای کار به خوبی با گزینه های مهم mongod آشنا شده ایم و flag های مهم آن را نیز بررسی کرده ایم. البته برخی از Flag ها باقی مانده است (مانند موارد TLS و authentication) که در فصل های جداگانه خودشان بررسی خواهند شد اما موضوع اصلی امروز فایل config.cfg است. برای شروع به documentation رسمی این فایل می رویم:

https://docs.mongodb.com/manual/reference/configuration-options/

این فایل تمام تنظیمات سرور ما را در خود ذخیره می کند تا مجبور نباشیم هر بار برای راه اندازی سرور از Flag های مختلف استفاده کنیم. مثلا اگر می خواهیم با هر بار اجرای سرور تنظیمات خاصی داشته باشیم (مثلا همیشه fork برای کاربران مک و لینوکس اجرا شود یا همیشه storageEngine خاصی فعال باشد) آن تنظیمات و Flag ها را درون این فایل ذخیره می کنیم و آن ها در هنگام اجرای سرور به صورت خودکار اعمال خواهند شد.

مسیر این فایل برای کاربران سیستم های عامل مختلف متفاوت است:

  • کاربران لینوکس این فایل را در مسیر /etc/mongod.conf پیدا خواهند کرد (البته اگر از package manger برای نصب استفاده کرده باشند).
  • کاربران ویندوز این فایل را در مسیر <install directory>/bin/mongod.cfg پیدا خواهند کرد. البته به جای install directory باید مسیر نصب MongoDB را قرار بدهید. مثلا برای من مسیر C:\Program Files\MongoDB\Server\4.2\bin محل قرار گیری این فایل است.
  • کاربران مک اگر از Homebrew استفاده کرده باشند، باید برای پیدا کردن این فایل به مسیر /usr/local/etc/mongod.conf بروند. اگر از Homebrew استفاده نکرده باشید، این فایل را دریافت نمی کنید و باید خودتان آن را به صورت دستی بسازید.

توجه داشته باشید که اگر این فایل را در مسیر پیش فرض دریافت نکرده اید باید خودتان آن را بسازید. همچنین مسیر ساختن این فایل مهم نیست و به جای استفاده از مسیر های بالا می توانید از هر مسیر دیگری نیز استفاده نمایید.

این فایل معمولا کمی بهم ریخته است بنابراین بهتر است به جای notepad یا ویرایشگر های ساده از VSCode یا Notepad++ استفاده نمایید. اگر یادتان باشد در جلسات اول با این فایل کار کردیم و dbpath خود را در آن تنظیم نمودیم:

# Where and how to store data.
storage:
  dbPath: C:\data\db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

البته در همین فایل می توانیم مقادیر پیش فرض دیگری را نیز مشاهده کنیم:

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: C:\data\db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  C:\Program Files\MongoDB\Server\4.2\log\mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

#processManagement:

#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

یعنی مسیر پیش فرض فایل log برای من روی C:\Program Files\MongoDB\Server\4.2\log\mongod.log قرار گرفته است. همچنین logAppend فعال (true) است که یعنی محتوای جدید log، محتوای قبلی آن را حذف نکند بلکه در انتهای محتوای قبلی اضافه شود. در قسمت net هم می توانیم port را ببینیم که به صورت پیش فرض روی 27017 است (البته ممکن است برای شما فرق کند). شما می توانید با مراجعه به documentation رسمی، تمام گزینه های این فایل را بررسی نمایید.

این فایل بر اساس استاندارد YAML کار می کند، بنابراین نمی توانید از tab استفاده کنید و برای indentation (تو رفتگی کد ها) حتما باید از space استفاده نمایید. در خود وب سایت MongoDB یک مثال از این فایل قرار داده شده است که با محتویات آن کاری نداریم اما آن را برایتان قرار می دهم تا ببینید که تمام indentation ها با اسپیس ایجاد شده اند:

systemLog:
   verbosity: <int>
   quiet: <boolean>
   traceAllExceptions: <boolean>
   syslogFacility: <string>
   path: <string>
   logAppend: <boolean>
   logRotate: <string>
   destination: <string>
   timeStampFormat: <string>
   component:
      accessControl:
         verbosity: <int>
      command:
         verbosity: <int>

      # COMMENT additional component verbosity settings omitted for brevity

بنابراین محتویات داخل آن چیزی به غیر از همان Flag ها و تنظیمات معمول نیست. سوال بعدی ما این است که چطور به MongoDB بفهمانیم که برای راه اندازی سرور از این فایل استفاده کند؟ برای این کار هنگام اجرای دستور mongod از flag ای به نام config استفاده می کنیم:

mongod --config C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg

البته حالت خلاصه آن نیز به شکل زیر است:

mongod -f C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg

هر کدام از دستورات بالا را که اجرا کنید، mongod از فایل پیکربندی شما برای راه اندازی سرور استفاده می کند. اگر فایل پیکربندی خود را در مسیر دیگری قرار داده اید باید به جای مسیر بالا، آن مسیر را تایپ کنید. ما در طول این دوره در مورد تنظیمات مختلفی صحبت خواهیم کرد و شما می توانید این تنظیمات را درون این فایل پیاده سازی کنید تا با هر بار راه اندازی سرور، راحت باشید.

تنظیمات مخصوص به shell

تنظیماتی که تا این قسمت بررسی کردیم، سراسری بود اما می خواهم تنظیمات خاصی را نیز بررسی کنیم که فقط مربوط به shell است. برای این کار می گوییم:

mongo --help

توجه کنید که کد بالا mongod نیست بلکه mongo است. با اجرای این کد، تنظیمات مخصوص shell نمایش داده می شوند. یکی از این گزینه ها nodb-- است که اگر اجرا شود (به شکل mongo --nodb) برای کار با shell نیازی به پایگاه داده نخواهیم داشت. قبلا هم گفتم که shell بر اساس جاوا اسکریپت نوشته شده است بنابراین اگر می خواهید کد های جاوا اسکریپت بنویسید که به پایگاه داده ربطی ندارد می توانید از nodb-- استفاده کنید.

گزینه quiet را نیز مثل حالت عادی داریم که باعث می شود پیام های کمتری در ترمینال داشته باشیم. همچنین port-- و host-- را داریم که با استفاده از آن می توانیم پرت و هاست خود را مشخص کنیم. در حالت پیش فرض از localhost:27017 استفاده می شود اما اگر سروری واقعی دارید (مثلا از یک شرکت میزبانی سرور اجاره کرده اید) می توانید با وارد کردن آدرس و پرت خود وارد سرور خود شوید و کدهایتان را در آن اجرا کنید (در انتهای این دوره این کار را خواهیم کرد). سرور شما حتما دارای رمز و نام کاربری است بنابراین u- و p- را داریم که به ترتیب مخفف username و password هستند و می توانید با استفاده از آن ها نام کاربری و رمز عبور خود را مشخص کنید.

نکته جالب دیگری نیز وجود دارد. اگر به جای mongo --help بگویید mogo تا وارد shell شوید و سپس عبارت help را به عنوان یک دستور جداگانه تایپ کنید، لیستی از دستورات مهم shell را دریافت خواهید کرد که با برخی از آن ها آشنا هستیم:

// بقیه دستورات //
        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
// بقیه دستورات //

همچنین اگر بخواهیم دستورات مربوط به یک database خاص را ببینیم باید وارد آن database بشویم. مثلا:

use test

سپس می گوییم:

db.help()

با اجرای این دستور، لیستی از دستورات موجود برای این پایگاه داده به شما داده می شود. همچنین برای مشاهده دستورات مربوط به یک collection خاص باید وارد آن collection بشویم:

db.collection.help()

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

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

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

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