انتخاب Storage Engine برای جداول در MySQL
موتورهای ذخیره سازی در Mysql ابزارهایی هستند که کار ذخیره و بازیابی اطلاعات را برای جداول انجام میدهند. پرکاربردترین موتور ذخیره سازی InnoDB است که استفاده از آن در بیشتر موارد توصیه شده است.
انواع موتورهای ذخیره سازی در Mysql:
- InnoDB: این موتور پرکابردترین موتور ذخیره سازی است. این موتور از transaction پشتیبانی میکند و نیز دارای امکان crash-recovery است که در صورت آسیب دیدن جدول، به بازیابی آن کمک میکند. قفل (lock) در سطح رکورد و نیز عدم قفل شدن کل جدول در عملیات ثبت و ویرایش ردیفها، باعث کارایی بالای این موتور شده و آن را به موتور ذخیره سازی ایده آل برای سیستمهای چند کاربره تبدیل کرده است. همچنین این موتور از کلید خارجی پیشتیبانی میکند. از نسخه ۵٫۵٫۵ به بعد، InnoDB موتور ذخیره سازی پیش فرض Mysql است.
- MyISAM: جداول با این موتور ذخیره سازی فضای کمتری از دیسک را نسبت به سایر موتورهای ذخیره سازی اشغال میکنند. قفل در سطح جدول در این موتور ذخیره سازی باعث کاهش کارآیی در محیطهایی میشود، که در آنها نیاز به خواندن و نوشتن همزمان است. بنابراین، این موتور ذخیره سازی بیشتردر محیطهایی استفاده میشود که در آنها فقط نیاز به خواندن اطلاعات است، یا دفعات خواندن بمراتب بیشتر از دفعات نوشتن است؛ نظیر وب و انباره داده. برخلاف InnoDB، این موتور ذخیره سازی از full-text-search پشتیبانی میکند.
- Memory: این موتور، اطلاعات جدول را جهت دسترسی سریع در RAM ذخیره میکند.
- CSV: جداول در این موتور، در واقع فایلهای متنی comma-separated هستند. بیشترین استفاده این نوع جداول در import/export است.
- Archive: این نوع از جداول کم حجم و فشرده بوده وامکان شاخص گذاری (Indexing) ندارند. این نوع جدول، معمولاً در موارد زیر استفاده میشود:
۱٫ ذخیره و بازیابی حجم بالای اطلاعاتی که به ندرت به آنها نیاز داریم.
۲٫ آرشیو اطلاعاتی.
۳٫ ذخیره اطلاعات امنیتی.
- Blackhole: این نوع جدول اطلاعات را گرفته ولی ذخیره نمیکند و مانند /dev/null در یونیکس است. این نوع جدول برای replication، بررسی سربار وارده به سرور هنگامی که binary-log فعال است، و … استفاده میشود.
- Merge: این موتور ذخیره سازی امکانی را فراهم میکند که مدیر پایگاه داده، یک سری از جداول یکسان MyISAM را بطور منطقی دسته بندی کرده و بعنوان یک شی واحد درنظر بگیرد. این موتور ذخیره سازی برای محیطهای با پایگاههای داده بسیار بزرگ، نظیر انبار داده، مناسب است.
- Federated: این موتور ذخیره سازی امکانی را فراهم میآورد که چند سرور Mysql که ازنظر فیزیکی جدا هستند، به هم متصل شوند و یک پایگاه داده مجازی را تشکیل دهند. از اینرو، برای محیطهایی که اطلاعات توزیع شده دارند، نظیر بازارها و مراکز بازرگانی و … مناسب است.
در بین موتورهای ذخیره سازی که شرح داده شد، InnoDB و MyISAM از بقیه پرکاربردتر هستند و بقیه به ندرت و در موارد خاص استفاده میشوند.
InnoDB یا MyISAM ؟
برای موارد روزمره، معمولاً یکی از دو موتور ذخیره سازی InnoDB و MyISAM استفاده میشود. ولی چگونه تصمیم بگیریم که از کدام استفاده کنیم؟
- InnoDB بدلیل داشتن قفل در سطح رکورد و نیز داشتن cache، مناسب محیطهای چند کاربره است. در حالی که MyISAM از قفل در سطح جدول استفاده میکند که آن را مناسب محیط هایی کرده است که درخواست خواندن نسبتا بیشتری دارند.
- در مواردی که اطلاعات مهم و حساس باشند، InnoDB بدلیل داشتن سیستم crash-recovery جهت بازیابی اطلاعات، بعد از خطاهای احتمالی و نیز داشتن مکانیسم داخلی تشخیص خطاهای نرم افزاری و سخت افزاری، از ایجاد خطا در اطلاعات یا از بین رفتن اطلاعات جلوگیری میکند.
- InnoDB مقدار حافظۀ بیشتری از MyISAM استفاده میکند و نیز فایلهای فیزیکی آن نیز از MyISAM حجیمتر هستند. بنابراین در مواردی که سرور شما در ارائه منابع، محدودیت دارد، MyISAM گزینه بهتری بهنظر میرسد.
در نهایت، انتخاب موتور ذخیره سازی به عوامل زیر بستگی دارد: