zartosht
November 5th, 2014, 09:16
درود بر همگی
موتورهای ذخیره سازی در MySQL ابزارهایی هستند که وظیفه ذخیره سازی و بازیابی اطلاعات جداول را انجام میدهند. موتور ذخیره سازی پیش فرض MySQL تا قبل از نسخه ۵٫۵٫۵ در اغلب موارد MyISAM بود، پس از آن InnoDB موتور ذخیره سازی پیش فرض شد. در حالحاضر دو موتور ذخیره سازی InnoDB و MyISAM بیشتر از دیگر انواع موجود در سایتها مورد استفاده قرار میگیرند.
http://blog.iranserver.com/wp-content/uploads/2014/10/6a00d83452e46469e200e54f761df18833-800wi.jpg
در این مقاله قصد داریم به معرفی انواع مختلف موتورهای ذخیره سازی و تفاوت آنها در MySQL بپردازیم.
موتور ذخیرهسازی InnoDB:
از نسخه ۵٫۵٫۵ به بعد، InnoDB موتور ذخیره سازی پیش فرض MySQL شد و این موتور ذخیره سازی نسبت به MyISAM از پیچیدگی بیشتری برخوردار میباشد.
یکی از ویژگیهای آن پشتیبانی از transactionها میباشد. همچنین InnoDB از کلید خارجی جهت محدودیت روابط بین جداول پشتیبانی میکند که این موضوع حفظ روابط بین جداول یکی از دلایل پیچیدهتر بودن آن نسبت به MyISAM میباشد.
InnoDB از قابلیت crash-recovery پشتیبانی میکند و در صورت آسیب دیدن جدول به بازیابی آن کمک میکند. بههمین دلیل در مواردی که اطلاعات مهم و حساس باشند استفاده از این موتور ذخیره سازی بهینهتر است.
InnoDB حافظه بیشتری را نسب به MyISAM مصرف میکند و از نظر فیزیکی فایلهای حجیمتری دارد، بنابر این اگر محدودیت در منابع وجود داشته باشد استفاده از InnoDB بهینه نیست.
این موتور ذخیره سازی دارای قابلیت lock (قفل کردن) در سطح رکورد و عدم قفل شدن کل جدول در عملیات ثبت و ویرایش ردیفها میباشد؛ به همین دلیل در سطح رکورد از سرعت بالایی جهت اجرای queryهای مربوط به insert/update/delete برخوردار میباشد.
موتور ذخیرهسازی MyISAM:
یکی از ویژگیهای مفید MyISAM پشتیبانی از full-text search می باشد و جدولهایی که از این موتور ذخیره سازی استفاده میکنند فضای کمتری از دیسک را اشغال میکنند.
MyISAM نسبت به سایر موتورهای ذخیرهسازی از سادگی بشتری برخوردار و برای افراد مبتدی مناسبتر است.
MyISAM بهدلیل locking در سطح جدول سرعت پائینی در queryهای insert/update دارد، اما سرعت آن در select بالا است.
جدولها در MyISAM میتوانند بهصورت فقط خواندنی (جهت کاهش فضا) ذخیره شوند. بنابراین درمواردی که سادگی و محدودیت منابع اولویت داشته باشد استفاده از این موتور ذخیرهسازی بهینه میباشد.
موتور ذخیرهسازی Memory:
در این نوع همانطور که از اسم آن نیز پیدا است کلیه دادهها در Memory (حافظه RAM) ذخیره میشود و با خاموش شدن سیستم دادههای جدولی که با این نوع طراحی شدهاست از بین خواهد رفت.
در مواردی که به سرعت بالا نیاز است و یا دادهها بصورت مداوم در حال نوشتن و خواندن هستند (مثل جداول temprory) استفاده از آن بهینه است.
موتور ذخیرهسازی CSV:
در CSV دادهها بهصورت باینری ذخیره نمیشوند و ذخیره دادهها در یک فایل csv انجام میگیرد. بهدلیل این محدودیت، برای ذخیره تعداد زیادی داده یا انواع دادههای بزرگ مناسب نیست.
فایلهای CSV بدلیل سادگی import و Export شدن به نرم افزارهایی مانند Excel ،OpenOffice ،Access و FileMaker تولید میشوند.
موتور ذخیرهسازی Archive:
در Archive اغلب انواع داده MySQL پشتیبانی میشود اما تنها دستورات Select و Insert قابل استفاده است. اطلاعات جدولی از این نوع بهصورت فشرده ذخیره میشود و غیر قابل ویرایش میباشد، بنابراین برای ذخیره log فایلها (یا اطلاعاتی مانند صورت حسابهای گذشته) و اطلاعات امنیتی مناسب میباشد.
با توجه به اینکه Select از جدولهایی ذخیره شده با این نوع نیاز به خارجسازی اطلاعات از حالت فشرده وجود دارد، در جستجوها و روابط پیچیده این موضوع زمانبر خواهد بود.
موتور ذخیرهسازی Federated:
Federated در نسخه MySQL ۵٫۰۳ اضافه و در آن امکان اتصال به سایر دیتابیسها فراهم شدهاست، به عبارتی چند سرور MySQL که ازنظر فیزیکی جدا هستند، به هم متصل میشوند و یک پایگاه داده مجازی را تشکیل دهند. با استفاده از Federated میتوان به یک دیتابیس دیگر متصل شد و دادههای جدولها را بدون Export یا Import نمودن به دیتابیس دیگر منتقل نمود.
موتور ذخیرهسازی BLACKHOLE:
BLACKHOLE دادهها را دریافت میکند اما ذخیره نمیکند و مانند /dev/null در یونیکس است. در طراحی دیتابیسهای توزیع شده که بطور خودکار دادهها تکرار شده اما بصورت لوکال ذخیره نمی شوند بهینه میباشد. بدون اینکه دادهها بصورت واقعی نوشته شوند امکان اجرای دستورات select و update وجود دارد.
اگرچه بنظر میرسد که روش بیهودهای است اما این روش جهت تست ساختار دیتابیس و کار با جدولهای تعریف شده مفید میباشد.
موتور ذخیرهسازی Merge:
با استفاده از Merge میتوان مجموعهای از جداول MyISAM یکسان را بطور منطقی دسته بندی کرده و بعنوان یک شی واحد درنظر بگیرد. با استفاده از این نوع موتور ذخیره سازی مدیریت مجموعهای از جداول لاگ به آسانی انجام میشود و جستجوهای کارآمدتری را میتوانید انجام دهید.
روش تغییر موتور ذخیرهسازی در MySQL:
query تغییر موتور ذخیره سازی یک جدول بهصورت زیر میباشد:
ALTER TABLE table-name ENGINE = InnoDB;
نام جدول مورد نظر را جایگزین table-name و نوع موتور ذخیرهسازی را جایگزین InnoDB نمائید.
مقایسه ویژگی های موتورهای ذخیره سازی در یک نگاه:
Feature
MyISAM
Memory
InnoDB
Archive
NDB
Storage limits
۲۵۶TB
RAM
۶۴TB
None
۳۸۴EB
Transactions
No
No
Yes
No
Yes
Locking granularity
Table
Table
Row
Table
Row
MVCC
No
No
Yes
No
No
Geospatial data type support
Yes
No
Yes
Yes
Yes
Geospatial indexing support
Yes
No
No
No
No
B-tree indexes
Yes
Yes
Yes
No
No
T-tree indexes
No
No
No
No
Yes
Hash indexes
No
Yes
No
No
Yes
Full-text search indexes
Yes
No
Yes
No
No
Clustered indexes
No
No
Yes
No
No
Data caches
No
N/A
Yes
No
Yes
Index caches
Yes
N/A
Yes
No
Yes
Compressed data
Yes
No
Yes
Yes
No
Encrypted data
Yes
Yes
Yes
Yes
Yes
Cluster database support
No
No
No
No
Yes
Replication support
Yes
Yes
Yes
Yes
Yes
Foreign key support
No
No
Yes
No
No
Backup / point-in-time recovery
Yes
Yes
Yes
Yes
Yes
Query cache support
Yes
Yes
Yes
Yes
Yes
Update statistics for data dictionary
Yes
Yes
Yes
Yes
Yes
منبع :
تفاوت موتورهای ذخیره سازی در MySQL - ایران سرور (http://blog.iranserver.com/mysql-storage-engines/)
موتورهای ذخیره سازی در MySQL ابزارهایی هستند که وظیفه ذخیره سازی و بازیابی اطلاعات جداول را انجام میدهند. موتور ذخیره سازی پیش فرض MySQL تا قبل از نسخه ۵٫۵٫۵ در اغلب موارد MyISAM بود، پس از آن InnoDB موتور ذخیره سازی پیش فرض شد. در حالحاضر دو موتور ذخیره سازی InnoDB و MyISAM بیشتر از دیگر انواع موجود در سایتها مورد استفاده قرار میگیرند.
http://blog.iranserver.com/wp-content/uploads/2014/10/6a00d83452e46469e200e54f761df18833-800wi.jpg
در این مقاله قصد داریم به معرفی انواع مختلف موتورهای ذخیره سازی و تفاوت آنها در MySQL بپردازیم.
موتور ذخیرهسازی InnoDB:
از نسخه ۵٫۵٫۵ به بعد، InnoDB موتور ذخیره سازی پیش فرض MySQL شد و این موتور ذخیره سازی نسبت به MyISAM از پیچیدگی بیشتری برخوردار میباشد.
یکی از ویژگیهای آن پشتیبانی از transactionها میباشد. همچنین InnoDB از کلید خارجی جهت محدودیت روابط بین جداول پشتیبانی میکند که این موضوع حفظ روابط بین جداول یکی از دلایل پیچیدهتر بودن آن نسبت به MyISAM میباشد.
InnoDB از قابلیت crash-recovery پشتیبانی میکند و در صورت آسیب دیدن جدول به بازیابی آن کمک میکند. بههمین دلیل در مواردی که اطلاعات مهم و حساس باشند استفاده از این موتور ذخیره سازی بهینهتر است.
InnoDB حافظه بیشتری را نسب به MyISAM مصرف میکند و از نظر فیزیکی فایلهای حجیمتری دارد، بنابر این اگر محدودیت در منابع وجود داشته باشد استفاده از InnoDB بهینه نیست.
این موتور ذخیره سازی دارای قابلیت lock (قفل کردن) در سطح رکورد و عدم قفل شدن کل جدول در عملیات ثبت و ویرایش ردیفها میباشد؛ به همین دلیل در سطح رکورد از سرعت بالایی جهت اجرای queryهای مربوط به insert/update/delete برخوردار میباشد.
موتور ذخیرهسازی MyISAM:
یکی از ویژگیهای مفید MyISAM پشتیبانی از full-text search می باشد و جدولهایی که از این موتور ذخیره سازی استفاده میکنند فضای کمتری از دیسک را اشغال میکنند.
MyISAM نسبت به سایر موتورهای ذخیرهسازی از سادگی بشتری برخوردار و برای افراد مبتدی مناسبتر است.
MyISAM بهدلیل locking در سطح جدول سرعت پائینی در queryهای insert/update دارد، اما سرعت آن در select بالا است.
جدولها در MyISAM میتوانند بهصورت فقط خواندنی (جهت کاهش فضا) ذخیره شوند. بنابراین درمواردی که سادگی و محدودیت منابع اولویت داشته باشد استفاده از این موتور ذخیرهسازی بهینه میباشد.
موتور ذخیرهسازی Memory:
در این نوع همانطور که از اسم آن نیز پیدا است کلیه دادهها در Memory (حافظه RAM) ذخیره میشود و با خاموش شدن سیستم دادههای جدولی که با این نوع طراحی شدهاست از بین خواهد رفت.
در مواردی که به سرعت بالا نیاز است و یا دادهها بصورت مداوم در حال نوشتن و خواندن هستند (مثل جداول temprory) استفاده از آن بهینه است.
موتور ذخیرهسازی CSV:
در CSV دادهها بهصورت باینری ذخیره نمیشوند و ذخیره دادهها در یک فایل csv انجام میگیرد. بهدلیل این محدودیت، برای ذخیره تعداد زیادی داده یا انواع دادههای بزرگ مناسب نیست.
فایلهای CSV بدلیل سادگی import و Export شدن به نرم افزارهایی مانند Excel ،OpenOffice ،Access و FileMaker تولید میشوند.
موتور ذخیرهسازی Archive:
در Archive اغلب انواع داده MySQL پشتیبانی میشود اما تنها دستورات Select و Insert قابل استفاده است. اطلاعات جدولی از این نوع بهصورت فشرده ذخیره میشود و غیر قابل ویرایش میباشد، بنابراین برای ذخیره log فایلها (یا اطلاعاتی مانند صورت حسابهای گذشته) و اطلاعات امنیتی مناسب میباشد.
با توجه به اینکه Select از جدولهایی ذخیره شده با این نوع نیاز به خارجسازی اطلاعات از حالت فشرده وجود دارد، در جستجوها و روابط پیچیده این موضوع زمانبر خواهد بود.
موتور ذخیرهسازی Federated:
Federated در نسخه MySQL ۵٫۰۳ اضافه و در آن امکان اتصال به سایر دیتابیسها فراهم شدهاست، به عبارتی چند سرور MySQL که ازنظر فیزیکی جدا هستند، به هم متصل میشوند و یک پایگاه داده مجازی را تشکیل دهند. با استفاده از Federated میتوان به یک دیتابیس دیگر متصل شد و دادههای جدولها را بدون Export یا Import نمودن به دیتابیس دیگر منتقل نمود.
موتور ذخیرهسازی BLACKHOLE:
BLACKHOLE دادهها را دریافت میکند اما ذخیره نمیکند و مانند /dev/null در یونیکس است. در طراحی دیتابیسهای توزیع شده که بطور خودکار دادهها تکرار شده اما بصورت لوکال ذخیره نمی شوند بهینه میباشد. بدون اینکه دادهها بصورت واقعی نوشته شوند امکان اجرای دستورات select و update وجود دارد.
اگرچه بنظر میرسد که روش بیهودهای است اما این روش جهت تست ساختار دیتابیس و کار با جدولهای تعریف شده مفید میباشد.
موتور ذخیرهسازی Merge:
با استفاده از Merge میتوان مجموعهای از جداول MyISAM یکسان را بطور منطقی دسته بندی کرده و بعنوان یک شی واحد درنظر بگیرد. با استفاده از این نوع موتور ذخیره سازی مدیریت مجموعهای از جداول لاگ به آسانی انجام میشود و جستجوهای کارآمدتری را میتوانید انجام دهید.
روش تغییر موتور ذخیرهسازی در MySQL:
query تغییر موتور ذخیره سازی یک جدول بهصورت زیر میباشد:
ALTER TABLE table-name ENGINE = InnoDB;
نام جدول مورد نظر را جایگزین table-name و نوع موتور ذخیرهسازی را جایگزین InnoDB نمائید.
مقایسه ویژگی های موتورهای ذخیره سازی در یک نگاه:
Feature
MyISAM
Memory
InnoDB
Archive
NDB
Storage limits
۲۵۶TB
RAM
۶۴TB
None
۳۸۴EB
Transactions
No
No
Yes
No
Yes
Locking granularity
Table
Table
Row
Table
Row
MVCC
No
No
Yes
No
No
Geospatial data type support
Yes
No
Yes
Yes
Yes
Geospatial indexing support
Yes
No
No
No
No
B-tree indexes
Yes
Yes
Yes
No
No
T-tree indexes
No
No
No
No
Yes
Hash indexes
No
Yes
No
No
Yes
Full-text search indexes
Yes
No
Yes
No
No
Clustered indexes
No
No
Yes
No
No
Data caches
No
N/A
Yes
No
Yes
Index caches
Yes
N/A
Yes
No
Yes
Compressed data
Yes
No
Yes
Yes
No
Encrypted data
Yes
Yes
Yes
Yes
Yes
Cluster database support
No
No
No
No
Yes
Replication support
Yes
Yes
Yes
Yes
Yes
Foreign key support
No
No
Yes
No
No
Backup / point-in-time recovery
Yes
Yes
Yes
Yes
Yes
Query cache support
Yes
Yes
Yes
Yes
Yes
Update statistics for data dictionary
Yes
Yes
Yes
Yes
Yes
منبع :
تفاوت موتورهای ذخیره سازی در MySQL - ایران سرور (http://blog.iranserver.com/mysql-storage-engines/)