تصور کنید که چه اتفاقی میافتاد اگر به عنوان یک راننده خودرو قادر بودید که براساس نیازهای مختلف که در سفر و یا استفاده از خودرو داشتید به یک گاراژ مراجعه کرده و موتور شما توسط یک مکانیک موتور ماشین خود را از با موتور دیگری تعویض میگردید. در این حالت شما برای هر شرایطی قادر بودید که از موتور دل خواه استفاده کنید؛ موتوری برای مسافرت، موتوری برای مسابقه و … . در مایاسکیوال دقیقا میتوانید به چنین اقدام کرده و تعویض موتور در هر شرایط قابل انجام خواهد بود. به طور کلی تعویض موتور برای موتورهای پایگاهدادهها مورد استفاده توسط نرمافزار مدیریت پایگاهدادهها رابطهای «RDBMS» مایاسکیوال یکی از مزایای مهم آن به شمار میرود. به این صورت که هر وقت نیاز داشتید، فراخور نیاز خود بتوانید به تغییر و تعویض موتور پایگاهدادهها به مورد دلخواه اقدام کنید.
قطعا ممکن است همان موتور پیشفرضی که در مایاسکیوال مورد استفاده است برای شما کافی باشد؛ با این حال در برخی شرایط استفاده از موتورهایی که برای آن شرایط خاص عملکرد بهتری را به نمایش میگزارند، به بازدهی بهتری منجر خواهد شد. در برخی از مواقع حتی ممکن است نیاز داشته باشید با استفاده از دانش برنامهنویسی و رابط برنامهنویسی نرمافزار «API» مایاسکیوال خود دست به ایجاد یک موتور سفارشی بزنید. یکی از ویژگیهای نرمافزارهای آزاد / متنبازنیز همین امکان سفارشیسازی بالای آنان با نگاه به کدهای دیگر است که باعث بهبود کارایی نرمافزار به دلیل قابلیت سفارشیسازی و انطباق بالا خواهد بود. در این مورد نیز به راحتی میتوانید موتور خود را با انشعاب و سفارشی کردن یکی از موتورهای فعلی ایجاد کنید.
در نرمافزار مدیریت پایگاهدادههای رابطهای مایاسکیوال تقریبا اکثر موتورهای پایگاهدادههای موجود برای مایاسکیوال را میتوان استفاده کرد؛ به شرط آنکه در زمان کامپایل نرمافزار آنها فعال بوده و غیرفعال نشده باشند؛ معمولا در اکثر توزیعهای گنو/لینوکس و یا نسخه موجود در داخل پایگاه اینترنتی اوراکل از نسخهای استفاده شده است که از اکثر موتورهای مرسوم اسکیوال استفاده میکند. با این حال اگر در توزیع شما از مایاسکیوال استفاده شده است که دارای موتور مورد نیاز شما نیست میتوانید از نسخه موجود در پایگاه اینترنتی اوراکل استفاده کرده و یا آن را خودتان از منبع کامپایل و نصب کنید.
کامپایل نرمافزار از پایه شاید برای توسعهدهندگان سیستمعامل ویندوز کمی ناآشنا باشد، اما این موضوع برای توسعهدهندگانی که از سیستمعاملهای شبه یونیکس استفاده میکنند، کاملا موضوعی عادی به شمار میآید. مایاسکیوال از از سه موتور پایگاه داده استفاده میکند که آیزم «ISAM» مایآیزم «MyISAM» و هیپ «HEAP» نام دارند؛ دو نوع موتور پایگاهدادهها دیگر برای پایگاههای داده نیز با نامهای اینودیبی «InnoDB» و برکلی «Berkley BDB» نیز از دیگر موتورهای پایگاه داده در مایاسکیوال به شمار میآیند.
آیزم «ISAM»
موتور آیزم یک موتور پایگاهدادهها است که روش مناسب و سریع برای مدیریت جداول در پایگاهدادهها است. این موتور با این ایده طراحی شده است که معمولا در اکثر پایگاههای داده در بیشتر مواقع به جای آنکه نیاز به بهروز کردن ویرایش اطلاعات باشد؛ نیاز به مشاهده و اجرای پرسوجو احساس میشود. بنابراین این موتور برای استفاده در مایاسکیوال از سرعت بالایی در خواندن اطلاعات جداول دارد و به راحتی میتواند بدون درگیر کردن منابع سیستم در حافظ اصلی و جانبی، اطلاعات را به راحتی نمایش دهد. با وجود این، دو نکته منفی درباره این موتور را میتوان به عدم پشتیبانی از تراکنش (transactions) اشاره داشت یا همچنین نکته منفی مهم دیگر به عدم تحمل خطا در این موتور اشاره داشت. برای مثال اگر دیسک سخت شما از کار بیفتد و یا با مشکل مواجه شود، موتور دیگر نمیتواند که اطلاعات را بازیابی کرده و آنان را مجدد احیا کند. اگر از این موتور در کاربردی تجاری با امکان خطرات بالا استفاده میکنید؛ بهتر است از پایگاه داده خود پشتیبانی زنده و ۲۴ ساعته داشته باشید که انجام این کار با استفاده از برخی ویژگیهای موجود در مایاسکیوال به راحتی قابل انجام است.
مایآیزم «My ISAM»
مایآیزم را میتوان نسخه سفارشی مایاسکیوال از موتور آیزم دانست که موتور پیشفرض در نرمافزار مدیریت پایگاه داده رابطهای مایاسکیوال است. به علاوه فراهم کردن امکاناتی برای فهرستگذاری و مدیریت فیلد که در آیزم وجود نداشته اند. مایآیزم از یک شیوه قفل کردن جدول «table locking» بهره میبرد که باعث بهبود کارایی بیشتر در زمان خواندن و نوشتنهای همزمان در پایگاهداده خواهد بود. نکته منفی برای این موتور این است که در اکثر مواقع نیاز دارید که دستور بهینهسازی جدول را در اکثر مواقع اجرا کنید؛ تا فضاهای از دست رفته توسط الگوریتم بهروزرسانی را از بازیابی کند. مایآیزم همچنین از چند یک ابزار افزونه «Extensions» مفید نیز برخوردار است؛ مانند افزونه «MyISAMChk» که وظیفه تعمیر فایل پایگاهدادهها را به عهده داشته و یا «MyISAMPack» که ابزاری برای فضاهای از دسترفته است.
موتور بر روی سرعت بالا تاکید داشته و عملکرد خوبی را در این زمینه بر جا گذاشته است و عملیات خواندن در آن بسیار سریع است. این به همان دلیل است که نرمافزار مدیریت پایگاهدادهها رابطهای مایاسکیوال در اکثر پایگاههای اینترنتی مورد استفاده است و به یکی از سریعترین مدیران پایگاهدادهها در بستر اینترنت تبدیل شده است. سرعت خواندن اطلاعات و نمایش اطلاعات در پایگاههای اینترنتی از اهمیت بالایی برخوردار است زیرا که اکثر عملیاتی که برای استفاده از پایگاهدادهها در اینترنت استفاده میشود؛ معطوف به خواندن اطلاعات از جداول پایگاهدادهها است و به همین دلیل هم اکثر IPPها کاربران را مجبور به استفاده از این موتور کردهاند.
هیپ «HEAP»
موتور هیپ اجازه میدهد جداول موقتی در داخل حافظه اصلی اقامت داشته باشند. اقامت در حافظه اصلی باعث بهبود و افزایش سرعت عمل موتور خواهد بود و سرعت این موتور را از موتورهای آیزم و مایآیزم بیشتر خواهد کرد. با این حال این نوع ذخیره داد در حافظه جانبی بسیار فرّار است و اگر اطلاعات قبل از اینکه سیستم خاموش شوند، هنوز در حافظه اصلی باشند؛ اطلاعات فوق به راحتی از دست خواهند رفت. هیپ علاوه بر این از هدر رفتن فضای خالی در زمانی که برخی سطرها پاک میشوند؛ جلوگیری میکند. همچنین جداول هیپ در مواقعی که میخواهید انتخابهایی تودرتو برای انتخاب و دستکاری دادهها داشته باشید؛ گزینه مناسبی به شمار میآید. لازم است یادآوری کنم که بعد از اینکه کارتان با جدول تمام شد آن را «destroy» کنید؛ بگذارید مجددا تاکید کنم که هرگز فراموش نکنید؛ هرگاه کار شما با جدولی تمام شد؛ آن را «destroy» کنید.
اینودیبی «InnoDB» بِرْکلْی دیبی «Berkley»
موتورهای اینودیبی و بِرْکلْی دیبی را میتوان موتورهایی دانست که محصولات مستقیم فناوریی هستند که باعث انعطاف مایاسکیوال و رابط برنامهنویسی نرمافزار مایاسکیوال++ شدهاند. تقریبا تمامی چالشهایی را که در استفاده از مایاسکیوال داشتهاید؛ مستقیما از حقیقت ناشی میشود که موتور پایگاهدادهها آیزم و مایآیزم در تراکنش و کلیدهای خارجی مشکلاتی را داراست. در هر حال پشتیبانی از این دو موضوع در این دو موتور بسیار بهتر از سه موتور معرفی شده است و اگر این دو قابلیت برای شما مهم هستند، باید از این دو موتور پایگاهدادهها استفاده کنید. در اکثر مواقع از موتور اینودیبی بیشتر از موتور پایگاهدادهها برکلی استفاده میشود. با وجود این سرعت در هنگام خواندن اطلاعات در دو موتور مذکور [اینودیبی «InnoDB» بِرْکلْی دیبی «Berkley»] بسیار پایینتر از سه موتور معرفی شده دیگر است.
با این حال اگر توانایی بیشتری را در خود احساس میکنید؛ میتوانید موتورپایگاهدادههای مختص به خود را نیز با استفاده از رابط برنامهنویسی نرمافزار مایاسکیوال++ نوشته و از آن استفاده کنید. رابط برنامهنویسی نرمافزار مذکور تمامی مواردی را که برای ساخت یک موتور پایگاهدادهها، دسترسی به سطور، فیلدها، جداول، پایگاههای داده، ارتباطات، حسابهای امنیتی و دیگر موارد مورد نیاز و توابع پایگاهدادهها را که نیاز دارید را در اختیار شما قرار خواهد داد. آموزش استفاده از این رابط برنامهنویسی نرمافزار در این نوشته امکانپذیر نیست؛ با این حال در همین حد اشاره خواهم کرد که رابط برنامهنویسی نرمافزار مایاسکیوال++ برای توسعهدهندگان وجود دارد و همین رابط برنامهنویسی نرمافزار است که پشت قابلیت تعویض موتور در مایاسکیوال است و این قابلیت را مدیون مایاسکیوال++ هستیم. با این حال این سبک از موتور های قابل نصب در مایاسکیوال میتواند به موارد دیگری مانند ساخت یک فراهم کننده اکسامال بومی در مایاسکیوال نیز استفاده شود.
تعویض موتور تمامی انعطاف موجود را توسط یک افزونه مایاسکیوال که برای انسی اسکیوال نوشته شده است؛ فراهم آورده است. این کار توسط پارامتر نوع «TYPE» انجام میشود. همچنین مایاسکیوال به شما این اجازه را نیز خواهد داد که برای هر یک از جداول یا جداول مختلف، موتور پایگاه داده خاصی را اختصاص دهید. در برخی از مواقع به آنان قالب جدول «table format» نیز اطلاق میشود. مثالی که در زیر نوشته شدهاست؛ یک کوئری ساده اسکیوال برای ساخت چند جدول است که برای هریک از آنان نوع جدول به انواع مختلف تغییر یافته است. به ترتیب انواع به کار رفته در مثال زیر موتورهای مایآیزم، آیزم و هیپ هستند. گفتنی است تمامی جداول ساخته شده از فیلدهای یکسانی برخوردارند؛ با این تفاوت که که نام آنان به همراه نوع آنان با هم تفاوت دارد.
CREATE TABLE tblMyISAM ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), value_a TINYINT ) TYPE=MyISAM CREATE TABLE tblISAM ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), value_a TINYINT ) TYPE=ISAM CREATE TABLE tblHeap ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), value_a TINYINT ) TYPE=Heap
همچنین میتوانید از «ALTER TABLE» برای انتقال یک جدول که از موتور خاصی استفاده میکند به جدول دیگر با موتورپایگاهدادههای دیگر استفاده کنید. برای مثال در کد نوشته شده اسکیوال زیر از دستور «ALTER TABLE» برای انتقال جدول به جدول دیگر استفاده شده است. اولین جدول از موتور مایآیزم استفاده میکند که با دستور زیر نوع «TYPE» آن به اینودیبی تغییر خواهد یافت که به معنای تغییر موتور در جدول مقصد است.
ALTER TABLE tblMyISAM CHANGE TYPE=InnoDB
مایاسکیوال این کار را در سه مرحله انجام خواهد داد. در اولین مرحله یک رونوشت از جدول مبدأ تهیه خواهد کرد. در مرحله بعدی تمامی تغییرات وارد شده در یک صف قرار می گیرند تا اینکه عملیات انتقال از یک موتور به موتور دیگر به طور کامل انجام شود. سپس در مرحله بعدی تغییراتی که در صف قرار داشتند یک به یک بر روی جدول مقصد اعمال شده و عملیات انتقال با موفقیت به پایان خواهد رسید.
نکته، راهی میانبر برای «ALTER TABLE»؛ اگر میخواهید به شکلی ساده جدول خود را از یک جدول بهرهمند از آیزم به جدولی بهرهمند از مایآیزم منتقل کنید؛ به راحتی قادر خواهید بود تا از دستوری کوتاهتر که روشی میانبر است استفاده کنید.
mysql_convert_table_format
برای اینکه مشاهده کنید که یک جدول خاص از چه موتور پایگاه دادهای استفاده میکند؛ میتوانید از دستور «SHOW TABLE» استفاده کنید. با استفاده از این دستور در داخل کد انسی اسکیوال به راحتی قادر به تعیین نوع موتور استفاده شده در هر جدول خواهید بود. خروجی دستور فوق یک جدول است که اطلاعات مختلفی را از یک جدول به نمایش در میآورد؛ با این حال آن قسمت از اطلاعاتی که موتور مورد استفاده در جدول اشاره دارد؛ اطلاعاتی است که در بخش نوع «TYPE» قرار دارد.
SHOW TABLE STATUS FROM tblInnoDB
نکته، راهی جایگزین برای نمایش اطلاعات جدول؛ به جای استفاده از دستور بالا و نوشتن دستور «SHOW TABLE»، میتوانید از دستور زیر استفاده کنید؛ که اطلاعاتی مشابه با دستور قبلی را نمایش خواهد داد.
SHOW CREATE TABLE [TableName]
در انتها؛ چیزی بد تر از این نیست که موتور مورد نظر شما در مایاسکیوال وجود ندارد و در همراه آن نباشد؛ همانطور که ذکر شد برای استفاده از یک موتور باید همراه با مایاسکیوال در زمان کامپایل، کامپایل شود تا بتوان از آن استفاده کرد. با وجود این اگر موتور فوق به همراه مایاسکیوال مورد استفاده شما نباشد و بخواهید از آن موتور در یک جدول استفاده کنید؛ پیغام خطایی برای شما نمایش داده نخواهد شد تا متوجه عدم وجد آن موتور در مایاسکیوال شود. اگر مایاسکیوال موتور مورد نظر را پیدا نکند، از موتور پیشفرض مایآیزم استفاده خواهد کرد که برای کسانی که حتما به موتور خاص نیاز دارند اصلا خوب نیست. این در حالی است که ممکن است در آینده چنین قابلیتی در مایاسکیوال افزوده شود و برنامهریزیهایی برای درج پیغام هشدار در هنگام نیافتن موتور مورد نظر در مایاسکیوال در ذهن توسعهدهندههای مایاسکیوال وجود دارد تا این مشکل را در آینده حل کنند. با این وجود و در حال حاضر تنها کاری که از شما بر میآید آن است که با استفاده از دستور بالا مشاهده کنید که جدول فوق از چه موتوری استفاده میکند. اگر از یک میزبان اینترنتی استفاده میکنید؛ از آن شرکتی که خدمت فوق را دریافت کردهاید و از قسمت پشتیبان حتما نصب بودن موتور دلخواه خود را جویا شوید.
انتخاب بیشتر به معنی بازدهی بیشتر خواهد بود؛ با وجود اینکه در مایاسکیوال از یک موتور خوب به صورت پیشفرض استفاده شده است که از سرعت و بازدهی تقریبا مناسب برخوردار است؛ چه نیازی به استفاده و تعویض موتور پایگاه داده به دیگر موارد وجود خواهد داشت؟ همچنین ب وجود اینکه موارد مختلف جهت استفاده به عنوان موتور در پایگاه داده عرضه شدهاست؛ چرا باید موتور اختصاصی ساخته و استفاده کنیم؟ جواب سوالات فوق بسیار ساده است. نکته مهم در این است که هر گاه بتوانید انتخاب بیشتری داشته باشید و دستتان در ساخت ابزاری سفارشی مورد نظر خودتان باز باشد؛ آنگاه موتور فوق بهترین تطابق را با نیازهای شما خواهد داشت.
قطعاً مایآیزم موتور سریع برای پایگاه داده به حساب میآید. با این حال اگر شما از قابلیت انتقال «transactional» در پایگاه داده استفاده کرده و به آن نیاز دارید؛ حتماً باید از دو موتور پایگاه دادهای که از این قابلیت پشتیبانی دارند؛ استفاده کنید. با این حال با استفاده از قابلیتی در مایاسکیوال که به شما اجازه استفاده از موتوری خاص را تنها بر روی یک یا چند جدول خاص میدهد؛ شما به راحتی خواهید توانست از یکی از موتورهای پایگاه داده برکلی یا اینودیبی برای آن جدول که به قابلیت مذکور نیاز دارد استفاده کرده و برای دیگر جداول از موتور پیشفرض مایآیزم استفاده کنید تا سرعت بیشتری را برای نمایش اطلاعات به همراه پشتیبانی از انتقال «transactional» را در پایگاه داده را نیز داشته باشید. به صورت کلی نکته مهم و کلیدی در نرمافزار مدیریت پایگاه داده رابطهای «RDBMS» مایاسکیوال را میتوان انعطاف بالای آن دانست.