نوشته‌ها

معرفی MongoDB

سرعت پردازش بالاتر: پایگاه‌ داده رابطه‌ای در هر جستجو و یا در هر ذخیره داده باید شروط زیادی مانند روابط بین جدول‌ها و صحت مقادیر رکوردها را بررسی کند که این پروسه‌ها سربار RAM و CPU را به شدت افزایش می‌دهد در حالیکه مونگودی‌بی به دلیل ساختار NOSQL تنها دخیره و جستجو می‌کند و در نتیجه سرعت دستیابی و ذخیره داده‌ها به شدت کاهش می‌یابد.

دخیره حجم بالاتر دیتا: پایگاه‌های داده به دو شکل می‌تواند حجم داده‌های قابل ذخیره در سیستم را افزایش دهند. horizontal-scaling و vertical-scaling.

vertical scaling: در این روش دیتاها روی یک node ذخیره می‌شود و برای افزاش حجم داده‌ها RAM و CPU یا Hard Disk (هارد) را افزایش می‌دهیم. از جمله پایگاه‌ داده‌ای که از این روش استفاده می‌کنند می‌توان MySQL را نام برد.
horizontal-scaling: در این روش داده در روی nodeهای متفاوت پخش، و هر قسمت از داده‌ها در یک سرور دخیره می‌شود، بدین ترتیب بار پردازش روی سرورهای متفاوت پخش خواهد شد و سرعت درسترسی به داده‌ها و حجم داده‌های قابل ذخیره افزایش خواهد یافت. دیتابیس‌هایی که از این روش استفاده می‌کنند مونگودی‌بی و casanndra را می‌توان نام برد.
همانطور که در بالا گفتیم در مونگودی‌بی می‌توان با استاده از horizontal-scaling که shard نامیده می‌شود حجم داده قابل ذخیره و همچین سرعت دسترسی به داده را افزایش داد.

مزیت‌های استفاده از shard:

با گسترش کلاستر تعداد پردازش‌هایی که هر shard انجام می‌دهد کاهش می‌یابد (به دلیل پخش شدن پردازش‌ها بین shardها)، در نتیجه سرعت دسترسی به داده‌ها افزایش می‌یابد.
همچنین با افزایش تعداد shardها حجم داده‌ی قابل ذخیره نیز افزایش می‌یابد.
shard mongodb
نصب مونگودی‌بی MongoDB به صورت shard

مونگودی‌بی داده‌ها را در سطح مجموعه پخش می‌کند. به این معنی که داده‌های یک مجموعه را در بین nodeها و shardها پخش می‌شود. مونگودی‌بی برای مدیرت نحوه پخش شدن داده‌ها از shard key استفاده می‌کند. shard key یه کلید ساده و یا یک کلید ترکیبی است که در همه سندها وجود دارد. عموما id_ می‌تواند به عنوان یک shard key استفاده شود.
مونگودی‌بی برای پخش داده‌ها از دو نوع shard key استفاده می‌کند. range based partitioning و hash based partitioning.

‫Range Based Sharding: در این روش داده‌ها را به تریبت shard key در دسته‌هایی به نام chunk دخیره می‌کند. در نتیجه داده‌های با shard key نزدیک به هم در یک chunk دخیره خواهند شد.مزیت‌ این روش سرعت بالای جستجو در مواقعی است که بر اساس کلید جستجو می‌کنیم. و مشکل بارز آن پخش نشدن درست داده‌ها در chunk هاست. از آنجا که عموما داده‌ها به ترتیب کلید در دیتابیس دخیره می‌شوند و از آنجا که داده‌های ورودی به دیتابیس کلید ترتیبی دارند همه داده‌ها در یک سری chunk دخیره خواهند شد.
Hash Based Sharding: در این روش مونگو از فیلدها یک هش تولید می‌کند سپس با استفاده از این هش‌ها دیتا را در chunk ها پخش می‌کند. از آنجا که هش تولید شده از کیلدها کاملا متفاوت از کلید است در نتیجه دو سند با کلید برابر ممکن است در دو chunk کاملا متفاوت قرار داشته باشد.

در این روش بر خلاف روش Range Based Sharding داده‌ها کاملا در chunkها پخش می‌شوند و در نتیجه فشار پردازش روی یک node نخواهد بود. از معایب این روش این است که بر خلاف روش Range Based Sharding جستجو سریع بروی داده‌های یک رنج آسان نیست.

آموزش ریستور کردن فایل های بزرگ و حجیم دیتابیس MYSQL در SSH لینوکس

ریستور کردن فایل های دیتابیس پر حجم و بزرگ از طریق محیط ssh در سیستم عامل لینوکس سرور

یکی از بزرگ ترین مشکلات مشتریانی که از هاست اشتراکی و میزبانی وب لینوکس به سرور مجازی یا سرور اختصاصی کوچ میکنند مشکل ریستور کردن فایل های sql بزرگ و حجیم در MySQL سرور لینوکس است . برنامه هایی مانند phpmyadmin یا MySQL  Dumper قادر به ذخیره سازی و ریستور کردن و بازیابی دیتابیس های خیلی بزرگ و حجیم نیستند و در صورت انتقال و ریستور کردن با آن ها همیشه احتمال و خطر بازیابی ناقص اطلاعات و آسیب دیدین دیتابیس وجود دارد .

از طرفی همیشه امکان ریستور کردن بکاپ کلی یا Full Backup برای خریدار سرور مجازی یا سرور اختصاصی امکان پذیر نیست . مثلا فول بکاپ توسط کنترل پنل cPanel ایجاد شده است ولی سرور مقصد از کنترل پنل دایرکت ادمین یا کلوکسو استفاده میکند . در این وضعیت هیچ راهی نیست جز استفاده از دستورات و کامند های ssh در لینوکس . در صورت استفاده صحیح از این کامند ها و دستورات برای بازیابی و ریستور کردن فایل های MySQL و دیتابیس ، قادر خواهید بود به راحتی فایل های MySQL با پسوند .sql و حجم های بالای ۱۵ و ۲۰ گیگ را در کمترین زمان ممکن و بدون خطا و آسیب دیدن به اطلاعات بازیابی و ریستور کنید .

قبل از انجام ریستور کردن دیتابیس توسط دستورات لینوکس در محیط ssh ابتدا باید اندازه پارامتر max_allowed_packet را بر اساس حجم دیتابیس مورد نظر تنظیم نمایید . برای ایجاد تغییرات در این پارامتر باید فایل my.cnf در مسیر /etc/ را ادیت کرده و میزان مورد نظر خود را وارد نمایید . سپس فایل را ذخیره کرده و سرویس MySQL را ریست کنید .

حالا وارد کنترل پنل وب هاستینگ سرور خود شوید و یک دیتابیس جدید ایجاد کنید . سپس نام کاربری و کلمه عبور این دیتابیس جدید را ساخته و به آن اختصاص دهید . حالا از طریق ssh وارد فولدر و پوشه ای شوید که فایل .sql در آن واقع شده است . با دستورات زیر اقدام به بازیابی و ریستور کردن این فایل .sql داخل دیتابیس MySQL ساخته شده در کنترل پنل وب هاستینگ خود نمایید :

mysql -u dbuser -p  dbname < db.sql

با زدن کلید Enter سیستم عامل از شما رمز و کلمه عبور دیتابیس ساخته شده در کنترل پنل را میخواهد که با وارد کردن آن عملیات بازیابی و ریستور کردن دیتابیس آغاز میگردد . اگر به کلمه عبور MySQL Root Password دسترسی دارید میتوانید بدون نیاز به کلمه عبور و نام کاربری دیتابیس اقدام به بازیابی و ریستور کردن آن با یوزر root پایگاه داده MySQL نمایید :

mysql -u root -p  dbname < db.sql