نحوه کار MongoDB + تفاوت Shell و Driver

How MongoDB Works + Shell and Driver Difference

MongoDB: نحوه ی کار MongoDB + تفاوت Shell و Driver (قسمت 05)

تفاوت Shell و Driver

در قسمت قبل با محیط Shell آشنا شدید. همان محیطی که در ترمینال ویندوز یا مک با آن کار کردیم و چند کد ساده را نوشتیم. احتمالا از من می پرسید چرا با Shell کار می کنیم؟ اکثر افراد دوست ندارند با محیط خشک و ساده ترمینال ها کار کنند و ترجیح می دهند از رابط های گرافیکی استفاده کنند تا مجبور به کد نویسی نباشند. به طور مثال اکثر توسعه دهنده ها برای ساخت پایگاه داده و جدول در MySQL از رابط گرافیکی PHPMyAdmin استفاده می کنند و کمتر کسی کدهای آن را به صورت دستی می نویسد. بنابراین چرا ما اصرار به استفاده از Shell داریم؟

من به عنوان کسی که آموزش های این دوره را می نویسم، عنوان «دوره آموزشی MongoDB» را برای این سری انتخاب کرده ام بنابراین باید MongoDB را فارغ از وابستگی های مختلف آن (مثل زبان برنامه نویسی) توضیح بدهم تا شما به صورت دقیق و خالص با MongoDB آشنا شوید. من نمی دانم که شما قرار است از زبان PHP استفاده کنید، یا از Python یا از Node.js یا هر زبان backend دیگری که مد نظرتان می باشد بنابراین اگر بخواهم پایگاه داده را در قالب یک زبان تدریس کنم، قطعا دچار مشکل می شویم و عده ای نمی توانند از آموزش ها استفاده کنند.

با این تفاسیر یک سوال جدی پیش می آید: بالاخره چه؟ در نهایت ما پایگاه داده را فرا می گیریم اما باید از زبان برنامه نویسی خودمان برای راه اندازی وب سایت یا هر برنامه دیگری استفاده کنیم. بگذارید این مورد را بررسی کنیم. ابتدا به قسمت drivers از وب سایت MongoDB بروید:

https://docs.mongodb.com/ecosystem/drivers/

با مراجعه به این صفحه، در سمت چپ، انواع زبان های برنامه نویسی را خواهید دید. روی هر کدام از این زبان ها که کلیک کنید، توضیحات و documentation آن نمایش داده خواهد شد. این درایور ها پکیج هایی هستند که برای زبان برنامه نویسی شما نصب می شوند و پُلی میان زبان برنامه نویسی و پایگاه داده خواهند بود. جالب تر اینجاست که در این درایور ها، دقیقا از همان دستوراتی استفاده می کنیم که در Shell استفاده کرده ایم و تفاوت آنچنانی ندارند. تنها تفاوت، تفاوتی جزئی در نوشتار یا نحو (syntax) آن ها است.

مثالی از زبان Node.js

بگذارید از Node.js مثالی برایتان بزنم. در قسمت قبل یاد گرفتیم که برای اتصال به یک collection باید از دستور db.collectionName استفاده کنید (به طوری که collectionName برابر اسم collection شما باشد) اما در پایتون باید از دستور زیر استفاده کنید:

const collection = db.collection('yourCollection');

یعنی نام collection را به صورت یک پارامتر به متدی به نام collection پاس می دهید. سپس برای وارد کردن یک ردیف خاص می گوییم:

collection.insertOne([{someData: 1}]);

البته باید این مسائل و نحوه نوشتار را از طریق documentation رسمی در همین وب سایت یاد بگیرید اما این تفاوت جزئی خللی در روند یادگیری یا کدنویسی شما ایجاد نمی کند. همچنین غیر ممکن است که ما تمام این درایور ها را مورد بررسی قرار دهیم و در یک دوره آموزشی از همه آن ها با زبان های مختلف استفاده کنیم.

البته بعد از تمام شدن مباحث مربوط به MongoDB یک برنامه Node.js را با استفاده از MongoDB طراحی خواهیم کرد که با درایور ها نیز آشنا شوید.

مثالی از زبان Python

حالا یک مثال دیگر از زبان پایتون را بررسی می کنیم. برای استفاده از MongoDB در زبان پایتون باید از درایوری به نام Pymongo استفاده کنید. مثلا اگر من بخواهم به یک پایگاه داده متصل شوم باید از دستور client استفاده کنم:

db = client['test-database']

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

collection = db.test_collection
collection = db['test-collection']

سپس با دستور زیر پست ها را از پایگاه داده می گیرم:

posts = db.posts

و نهایتا یک پست جدید را به collection خود اضافه می کنم و آیدی آن را می گیرم:

post_id = posts.insert_one(mypost).inserted_id

مثالی از زبان PHP

برای PHP جدا از driver خاص، انواع و اقسام کتابخانه ها و extension های مختلف وجود دارد که هر کدام قواعد خاص خود را دارند. شما با مراجعه به documentation رسمی MongoDB می توانید هر کدام را که خواستید استفاده کنید.

فرض کنید می خواهیم به collection ای به نام users دست پیدا کنیم که درون پایگاه داده ای به نام test است:

$collection = (new MongoDB\Client)->test->users;

سپس می خواهیم یک document جدید در این collection ایجاد کنیم:

$insertOneResult = $collection->insertOne([
    'username' => 'admin',
    'email' => 'admin@example.com',
    'name' => 'Admin User',
]);

همانطور که می بینید باز هم از insertOne استفاده کرده ایم و تفاوت آنچنان عمیق نیست.

نحوه کار MongoDB

به تصویر زیر نگاه کنید:

نحوه ی کار پایگاه داده ی MongoDB
نحوه کار پایگاه داده MongoDB

در این تصویر ساختار کار MongoDB را می بینید. شما برنامه ای را خواهید داشت که یک UI و یک Backend دارد. حالا Backend شما برای اینکه بتواند با سرور MongoDB ارتباط برقرار کند باید درایور خاصی داشته باشد. همانطور که بالاتر بحث کردیم، انواع و اقسام درایور ها برای زبان های برنامه نویسی مختلف وجود دارند. شما با استفاده از این درایور ها، کوئری (درخواست) خود را به سرورِ MongoDB ارسال می کنید (البته ما تا اینجای کار درخواست ها را از Shell به سرور MongoDB ارسال کرده ایم، بنابراین یا از Shell یا از Driver. سپس این سرور درخواست شما را بررسی کرده و آن را به یک لایه میانی به نام Storage Engine (موتور ذخیره سازی) ارسال می کند. در نهایت این موتور ذخیره سازی، دستور را اجرا می کند (مثلا داده های جدیدی را در پایگاه داده ثبت می کند یا اینکه داده ای را از آن دریافت کرده و به شما پس می فرستد و الی آخر). نام موتور ذخیره سازی پیش فرض در MongoDB موتوری به نام WiredTiger است اما می توانید آن را تغییر دهید، گرچه پیشنهاد نمی شود.

حالا به تصویر زیر نگاه کنید:

نگاهی دقیق تر به سمت سرور در MongoDB
نگاهی دقیق تر به سمت سرور در MongoDB

اگر بخواهیم نگاه نزدیک تری به Storage Engine داشته باشیم باید با نوع ثبت و دریافت داده ها در آن آشنا شویم. در واقع زمانی که سرور MongoDB درخواست شما را به Storage Engine می دهد، storage engine در ابتدا داده ها را روی مموری ذخیره می کند تا داده هایی که بیشتر استفاده می شوند در مموری حاضر باشند. چرا؟ به دلیل اینکه دسترسی به مموری بسیار سریع تر از دسترسی به داده ها روی دیسک و محل ذخیره است. همچنین اگر قرار به write (نوشتن) داده باشد، ابتدا داده ها را در مموری می نویسد و بعدا آن ها را به دیسک منتقل می کند.

این فصل که فصل اولیه و معرفی MongoDB بود تمام شده است. از قسمت بعدی وارد فصل جدید می شویم که در مورد عملیات CRUD است.

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

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

مهدی
17 دی 1400
سلام دوست عزیز خیلی خوب بود حتما ادامه بدید موفق باشید

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

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