پایتون زبان برنامهنویسی قدرتمندی است، میتوان از پایتون تقریبا برای هر نوع از اپلیکیشنی استفاده کرد و باید گفت که آنقدر منعطف است که بتواند به همه نیازها پاسخگو باشد.
حال چه میتوان گفت اگر بدنبال یک راهحل برای قسمت دیتابیس اپلیکیشنمان باشیم که به اندازه خود پایتون منعطف و توانا باشد؟
اینجا جائیست که NoSQL و گزینه اصلی آن MongoDB وارد کار میشود.
SQL در مقابل NoSQL
اگر که با مونگودیبی آشنایی ندارید باید بگویم که مونگودیبی یک بانک اطلاعاتی NoSQL است که در سالهای گذشته توانسته محبوبیت بسیار زیادی را به دست بیاورد. در مقایسه با بانکهای اطلاعاتی SQL این دسته از بانکهای اطلاعاتی ساختار متفاوتی دارند و کار ذخیره و بازیابی اطلاعات را نیز به صورتی متفاوت انجام میدهند.
برای سالها بود که بانکهای اطلاعاتی SQL تنها گزینه موجود در اختیار توسعهدهندگان بود تا بتوانند سیستمهای بزرگ و مقیاسپذیر را طراحی بکنند. با این حال نیاز به ذخیره ساختارهای دادهای پیچیده باعث تولد نوع جدیدی از بانکهای اطلاعاتی به نام NoSQL شد که به توسعهدهندگان اجازه ذخیره ساختارهای دادهای ناهمگون را میداد.
اما زمانی که قصد انتخاب یک گزینه را دارید ممکن است این سوال پیش بیاید که کدام مورد بهتر است؟ خب در این حالت نباید گفت که یک مورد از دیگری بهتر است، هر کدام این ابزارها برای یکسری کارها مناسب و برای یکسری کارها نامناسب هستند.
SQL
- این مدل یک ساختار رابطهای طبیعی دارد.
- دادهها در جداول ذخیره میشوند.
- این مدل برای اپلیکیشنهایی که سازگاری و همخوانی دادهها در آن زیاد هستند مناسب است.
- افزودن یک خصوصیت یا ویژگی جدید به معنی تغییر شمای کلی بانک اطلاعاتی است.
- شمای بانک اطلاعاتی بسیار سختگیر است.
- تراکنشهای ACID در این سیستم پشتیبانی میشود.
- مقیاسبندی به صورت عمودی انجام میشود.
NoSQL
- این مدل غیر رابطهای است.
- براساس نوع بانک اطلاعاتی ممکن است دادهها به صورت جیسان و یا Key-value ذخیره شوند.
- تمام رکوردها نیازی به همسان بودن ندارند.
- افزودن خصوصیات بدون دگیر شدن کل بانک اطلاعاتی صورت میگیرد.
- استفاده از شِما لزومی ندارد.
- براساس بانک اطلاعاتی که استفاده میشود ممکن است از ACID پشتیبانی شود.
- مقیاسبندی به صورت افقی انجام میشود.
تفاوتهای بسیار زیاد دیگری نیز بین این دو سیستم وجود دارد که بررسی آنها از موضوع این مطلب خارج است.
براساس مسئلهای که شما با آن سر و کار دارید ممکن است استفاده از بانک اطلاعاتی SQL معقولانهتر باشد اما در حالتهایی نیز باید سراغ بانک اطلاعاتی No-SQL بروید. اما یکی از موضوعات دیگری که بوجود خواهد آمد تفاوت میان نسخههای مختلف No-SQL است. از آنجایی که شیوههای ذخیره سازی متفاوتی وجود داشته، بانکهای اطلاعاتی No-SQL مختلفی نیز وجود دارد:
- ذخیرهسازی به سبک Key-Value: DynamoDB
- ذخیرهسازی مبتنی بر سند: CouchDB ،MongoDB ،RethinkDB
- ذخیرهسازی ستونی: Cassandra
- ساختمان داده: Redis
مونگودیبی
حال بیایید تمرکز خودمان را روی مونگودیبی بگذاریم.
مونگودیبی یک بانک اطلاعاتی سند-محور یا مبتنی بر سند و متن باز است. مونگودیبی اطلاعات را به صورت اسناد و از طریق دادههای جیسان ذخیره میکند. خروجی این فرایند باعث میشود تا دادهها بتوانند منعطف بوده و نیازی به یک شِمای کلی برای کار کردن نداشته باشند.
برخی از ویژگیهای مهمی که مونگودیبی ارائه میکند عبارت است از:
- پشتیبانی از کوئریهایی مانند مچینگ ==، مقایسه کردن (< , >) و حتی RegEx
- ذخیرهسازی هر نوع از داده.
- منعطف و سریع بودن.
- تغییر بسیار ساده ساختار کلی دیتابیس.
- وجود ویژگیهای دیتابیسهای رابطهای در مونگودیبی. ایندکسینگ و… .
ویژگیهایی نیز وجود دارند که شما تنها در ابزاری مانند مونگودیبی میتوانید آن را پیدا کنید:
- چه شما تنها یک سرور تنها بخواهید و یا اینکه به یک کلاستر کامل نیاز داشته باشید مونگودیبی میتواند براساس نیازتان مقیاسپذیر باشد.
- مونگودیبی میتواند فرایند بالانسینگ را به صورت خودکار مدیریت کند.
- سرویس مدیریت مونگودیبی یا MMS یک ابزار مبتنی بر وب بسیار ساده و البته عالی است.
- به لطف وجود MMF یا Memory Mapped Files ذخیره اطلاعات روی RAM در حجم بسیار پایینی انجام میشود.
شاید با خواندن این مطالب به آن نتیجه برسید که مونگودیبی بانک اطلاعاتی بسیار کاملی است و میتواند برای هر مشکلی راهگشا باشد، اما باید بگویم که اینگونه نیست. یکی از مشکلات مونگودیبی پشتیبانی نکردن از تراکنشهای ACID است.
همچنین مونگودیبی از joinهای طبیعی پشتیبانی نمیکند، شما برای انجام چنین کاری نیاز است که به صورت دستی وارد عمل شوید. این کار باعث میشود که سرعت عمل شما پایین بیاید و این خود مشکل بزرگیست.
کار با PyMongo
حال که ما به خوبی با مونگودیبی آشنا شدیم نیاز است که آن را با پایتون ادغام نماییم. برای چنین کاری نیاز است که سراغ یک پکیج استاندارد که توسط خود توسعهدهندگان مونگودیبی نوشته شده است برویم. این پکیج PyMongo نام دارد. بیایید با همدیگر آن را نصب کرده و با آن بانک اطلاعاتیمان را مدیریت کنیم.
برای نصب پایمونگو مانند هر پکیج دیگری از طریق pip وارد عمل شوید:
pip3 install pymongo
بعد از آن برای آنکه مطمئن شوید که به درستی پکیج را نصب کردهاید در محیط تعاملی پایتون دستور import pymongo را وارد نمایید. اگر با خطایی مواجه نشدید بدانید که به خوبی آن را نصب کردهاید.
حال نیاز است تا خود مونگودیبی را نصب کنید. برای اینکار اگر از مک استفاده میکنید کافیست دستور:
brew install mongodb
را وارد کنید. اگر از ویندوز و یا لینوکس نیز استفاده میکنید میتوانید با مطالعه این لینک راهنماییهای لازم را دریافت نمایید.
بعد از نصب برای اجرای آن کافیست در خط فرمان دستور mongod را وارد کنید.
ساخت یک ارتباط
برای ایجاد یک ارتباط از طریق برنامه پایتون با مونگودیبی کافیست MongoClient را در پروژه وارد کرده و سپس یک نمونه از آن را ایجاد کنید:
from pymongo import MongoClient
client = MongoClient()
با انجام این کار یک ارتباط روی localhost با پورت 27017 ایجاد میشود. البته میتوانید این دو مقدار را از طریق ورودیهای MongoClient تغییر دهید:
client = MongoClient('localhost', 27017)
میتوانید به این صورت نیز عمل کنید:
client = MongoClient('mongodb://localhost:27017')
دسترسی به بانک اطلاعاتی
بعد از آنکه از طریق MongoClient یک ارتباط جدید را ایجاد کردید حال میتوانید که با خود بانک اطلاعاتی ارتباط برقرار کنید. برای آنکه بانک اطلاعاتی مورد نظرتان را ایجاد کرده و به آن دسترسی پیدا کنید میتوانید به شیوه زیر عمل نمایید:
db = client.pymongo_test
میتوانید این کار را به شیوه دیکشنری نیز انجام دهید:
db = client['pymongo_test']
البته تا زمانی که دادهای در این دیتابیس وارد نکنید، هیچ دیتابیسی ایجاد نمیشود. اما بعد از وارد کردن پروسه ساخت دیتابیس به صورت خودکار انجام میشود.
وارد کردن اسناد
ذخیره کردن داده در مونگودیبی به سادگی نوشتن تنها دو خط کد است. ابتدا شما باید Collection که در نظر دارید را تعیین کنید. در واژهشناسی بانکهای اطلاعاتی مبتنی بر سند Collection و Document به Table و Row در بانک اطلاعاتی SQL گفته میشود.
posts = db.posts
post_data = {
'title': 'Python and MongoDB',
'content': 'PyMongo is fun, you guys',
'author': 'Scott'
}
در خط ابتدایی Collection تعیین شده و در خط بعدی یک سند جدید را به صورت دیکشنری ایجاد کردهایم، اما هنوز آن را در Collection وارد نکردهایم.
result = posts.insert_one(post_data)
print('One post: {0}'.format(result.inserted_id))
خط ابتدایی کدهای بالا باعث میشود تا دیتا ساخته شده در بانک اطلاعاتی قرار بگیرد.
بازیابی سندها
برای بازیابی اطلاعات از اسناد باید از متد find_one() استفاده کنید. این متد را میشود به صورتی نوشت که بتوان چندین داده را نیز دریافت کرد که در این ارتباط نیز صحبت میشود. در مثال زیر ما سعی داشتیم تا براساس نام نویسنده یک post را دریافت نماییم:
bills_post = posts.find_one({'author': 'Bill'})
print(bills_post)
اگر چند سند برای یک نویسنده داشته باشیم با استفاده از این دستور تنها مورد آخر را برگشت میدهد. اما اگر بخواهیم تمام موارد را دریافت کنیم باید به صورت زیر عمل نماییم:
scotts_posts = posts.find({'author': 'Scott'})
print(scotts_posts)
انجام چنین کاری یک دیتا با قابلیت تکرارپذیری را برمیگرداند که میشود از طریق یک حلقه for ساده آن را پیمایش کرد:
for post in scotts_posts:
print(post)
در پایان
مدیریت یک بانک اطلاعاتی با استفاده از پایتون از این سادهتر نخواهد بود. برای پروژههایتان باید با دقت ابزارهایتان را انتخاب کنید. استفاده از مونگودیبی مطمئنا میتواند برای گستره بزرگی از خواستهها جوابگو باشد.
اگر قصد یادگیری پایتون و یا مونگودیبی را دارید میتوانید از آموزش های راکت استفاده کنید. در زیر لینکهای مربوطه قرار گرفته است.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید