پايگاه*هاي داده*اي از بخش*هاي مختلفي تشکيل شده*اند. يکي از اين بخش*ها، موتور ذخيره* و بازيابي آنهاست که براي ايجاد، به*روزرساني، حذف و مشاهده اطلاعات (CRUD) در جداول پايگاه*هاي داده به*کار مي*رود. در پايگاه داده منبع*باز محبوب MySQL دو موتور ذخيره*سازي مختلف به*نام*هاي MyISAM و InnoDB وجود دارد. اين دو موتور ذخيره*سازي تفاوت*هاي زيادي با يکديگر دارند که در اين جا قصد داريم شيوه انتخاب بهترين موتور ذخيره*سازي در شرايط مختلف را بررسي کنيم.
[B] [/B][B]
چرا بايد از InnoDB استفاده کرد؟
[/B] بسياري از طراحان بانك*هاي اطلاعاتي، موتور InnoDB را از همه نظر مورد بررسي قرار مي*دهند بجز سرعت. آنان معتقدند اين موتور در مقايسه با MyISAM حرفي براي گفتن ندارد؛ در حالي*كه تمام اين اطلاعات از طريق شايعات بي*پايه و اساس شکل گرفته است. در واقعيت، نمي*توان موت وري را پيدا کرد که مناسب استفاده در محيط عملياتي باشد و ميزان مصرف حافظه آن به اندازه InnoDB بهينه باشد.
هر چند گاهي*اوقات موتور InnoDB بازدهي بهينه*اي ندارد اما براي اموري که مرتبط با پردازش تراکنش*هاي برخط (OLTP) مي*شود، بهترين گزينه است.
[B] [/B][B]
بازدهي
[/B] از نظر بازدهي، آزمايش*هاي مختلفي روي اين موتور انجام گرفته و نتايج معتبري مبني بر بازدهي مناسب آن منتشر شده است. وب*سايت MySQLPerformanceBlog.comکه يکي از شرکت*هاي فعال در زمينه بهبود موتورهاي ماي*سه*کوئل است، با به *راه*اندازي تست آزمايشگاهي ميان Falcon ،MyISAM و InnoDB قصد داشت موتور فالكون را به*عنوان موتور بهتر معرفي کند در حالي* که InnoDB بهترين نتايج را به*دست آورد.
يکي از نقاط مهم پياده*سازي InnoDB در انديس*هاي خوشه*اي آن است. به اين معنا که داده*هاي جداول در حقيقت در برگ*هاي انديس*هاي کليد اصلي ذخيره مي*شوند و بنابراين نيازي نيست اطلاعات رديف را به*صورت جداگانه واکشي کرد. همچنين اين موضوع باعث اشغال فضاي بيشتر مي*شود. وقتي از موتوري مانند MyISAM استفاده مي*کنيد، مقدار کليد-بافر نيز همزمان با انديس جدول بارگذاري مي*شود، اما InnoDB درست نقطه مقابل آن است و هنگام بافر کردن انديس، خود به*صورت ضمني داده*ها را نيز در جدول بافر مي*کند و مي*توان اين مقدار را با تغيير تنظيم innodb_buffer_pool به ميزان دلخواه تغيير داد. اين اقدام باعث مي*شود بازدهي بسيار بالاتر برود اما در مقايسه، فضاي حافظه بيشتري از سيستم مصرف شود.
تکنيک خوشه*بندي (كلاسترينگ) کليدهاي اصلي يکي از دلايل فاصله زياد بين MyISAM و InnoDB در اين آزمايش است. نکته قابل توجه اين است که InnoDB در بخش انديس دوم نيز از MyISAM بهتر عمل مي*کند. به* اين ترتيب بازدهي اين موتور نه**تنها در بخش خوشه*بندي کليدها است، بلکه در هر کوئري ارسال شده نيز سريع*تر است.
اين موتور از ترفندهاي ديگري هم براي انديس*ها استفاده مي*کند به*طوري كه براي کوئري*هاي مرتب، جدولي از انديس*هاي انطباقي درست مي*کند. انديس*هاي جدول انطباقي نسبت به درخت Btree بسيار سريع*تر هستند. دوباره بايد اشاره کرد که اين بازدهي بالا منجر به افزايش مصرف حافظه مي*شود.
همچنين در آزمايش*هاي انجام شده مي*توان دريافت که InnoDB با بزرگ شدن سيستم و بالا رفتن تعداد تراکنش*هاي همزمان دچار مشکل مي*شود. اين مشکل توسط تيم توسعه اين موتور پذيرفته شده و قرار است در نگارش*هاي بعدي رفع شود. با وجود چنين مشکلي، InnoDB اغلب براي فعال* كردن موازي*سازي به*کار مي*رود.
[B] [/B][B]
موازي*سازي
[/B] نکته جالب اين است که InnoDB در پياده*سازي سطوح بالاي موازي*سازي مشکل قفل* کردن دوبه*دو ناسازگار را دارد ولي باز هم براي اين موضوع استفاده مي*شود. يکي از بزرگ*ترين مشکلات MyISAM نداشتن قابليت قفل کردن سطح رديف داده است. به اين ترتيب در نقاطي که اين مساله نياز است، به*اجبار از قفل* کردن سطح جدول استفاده مي*کنند.
[B] [/B][B]
پايداري
[/B] همه مديران پايگاه*هاي *داده*اي حتما اين کابوس را ديده*اند كه در حال پاسخ به تماس مشتري هستند و به وي مي*گويند داده*هايش خراب شده يا کاملا از دست رفته است. موتور MyISAM در اين*جور مواقع کمکي نمي*كند و هيچ مکانيزمي براي حفظ يکپارچگي داده*ها ندارد. خرابي سخت*افزار، خاموش کردن ناگهاني سيستم و عمليات لغو شده باعث مي*شود داده*هاي موتور MyISAM بسادگي در معرض خطر خراب شدن قرار بگيرند. البته ابزارهاي خوبي براي بازيابي در اين شرايط براي اين موتور نوشته شده است، اما هيچ*کدام از اين ابزارها ضمانت نمي*کنند که همه داده*ها را صحيح و سالم برگردانند و به*کار*گيري آنها هم مستلزم چند ساعت در دسترس نبودن سرور است.
اما InnoDB به*طور کامل از ACID پشتيباني مي*کند و طوري طراحي شده که دوام و پايداري اطلاعات را تضمين کند. اموري از جمله کدگذاري اطلاعات را هم به*صورت خودکار انجام مي*دهد و صـــحت اطـلاعات موجود در صفحه*هاي پايگاه* داده را مي*سنجد. هر چند اين تدابير امنيتي در خاموشي*هاي ناگهاني تاثيري ندارند، ولي مي*توانند مشکلات سخت*افزاري را کاملا از بين ببرند و خرابي داده*ها را تا حد ممکن کاهش دهند.
دروپال يکي از سيستم*هاي مديريت محتواي معروف منبع*باز و سازماني است که کاربرد زيادي در داخل و خارج از کشور دارد. در گزارشي از تيم توسعه و تحقيقات اين گروه آمده است به*دنبال پايين آمدن سرور در سال 2007، پايگاه* داده اصلي سايت از دسترس خارج شده بود. بعد از مشاهده سياهه اعمال ماي*سه*کوئل، روشن شد که پايگاه داده ايرادي نداشته، بلکه InnoDB ميان داده موجود در حافظه اصلي و داده موجود روي ديسک تناقضي پيدا کرده که نشان دهنده خرابي حافظه اصلي است لذا به*سرعت سرور را پايين آورده تا از رخداد خرابي داده*ها جلوگيري کند. در دسترس نبودن يک وب*سايت وقتي خطر از دست رفتن اطلاعات وجود دارد، اصلا گزينه قابل بحثي نيست.
[B] [/B][B]
امنيت داده
[/B] موتور InnoDB طبيعتي تراکنشي دارد و به *همين دليل مي*توان نسخه*هاي پشتيبان* برخط را سريع و ساده گرفت. اين مساله در موتور MyISAM به يک چالش بدل مي*شود و بايد به*طور مداوم از داده*هاي موجود در پايگاه داده نسخه پشتيبان تهيه کرد که در مقياس وب*سايت*هاي بزرگ اين مساله اصلا قابل بررسي نيست. تنها راه*حلي که MyISAM براي پشتيبان*گيري خودکار ارائه مي*دهد، ايجاد يک سرور پايگاه داده ديگر است که اطلاعات را به*صورت مداوم از سرور اصلي بيرون کشيده و در پايگاه آينه*اي آن قرار مي*دهد.
از سوي ديگر، InnoDB مي*تواند عمليات پشتيبان*گيري را هنگام انجام تراکنش به*کار بگيرد و پشتيبان*گيري اصلي از تمام پايگاه داده را يک بار و همان ابتداي کار انجام دهد.
[B] [/B][B]
چرا از MyISAM استفاده کنيم؟
[/B] [B]سادگي:[/B] در مقايسه با مزاياي InnoDB به*نظر مي*رسد که MyISAM حرفي براي گفتن نداشته باشد. هر چند بايد اشاره داشت اين موتور در برخي موارد مزيت*هاي خود نسبت به InnoDB را نشان مي*دهد. يکي از اين مزايا، سادگي اين موتور است و به*همين دليل، نوشتن نرم*افزارهايي که بتوانند با اين موتور کار کنند، ساده خواهد بود.
[B]بهينگي:[/B] بهينه بودن يکي ديگر از ويژگي*هاي اين موتور است. اگر پايگاه داده با محوريت کليدهاي اصلي طراحي و به*صورت مناسبي هم انديس*گذاري شده است، در اين صورت مي*توان بازدهي MyISAM را نسبت به InnoDB بيشتر دانست. همچنين براي برخي از جداول بزرگ، استفاده از InnoDB به**هيچ عنوان به*صرفه نيست و در زمينه جستجو، نسبت به MyISAM بسيار کندتر عمل مي*کند.
[B] [/B][B]
استفاده از منابع
[/B] در علم کامپيوتر اين موضوع تقريبا به*صورت يک اصل پذيرفته شده است که با بالا رفتن سرعت، مصرف حافظه نيز افزايش مي*يابد. همان*طور که اشاره کرديم، سرعت InnoDB و الگوريتم*هاي پيچيده و سريع آن، بدون هزينه نيستند و مصرف حافظه* بالايي دارند. نه*تنها InnoDB حافظه بيشتري نسبت به MyISAM مصرف مي*کند، بلکه حجم حقيقي داده*ها در موتور نخست بيشتر از MyISAM است.
براي سرورهايي که از نظر منابع محدود هستند، MyISAM بهترين گزينه است، هر چند اگر به*دنبال سطوح بالاي موازي*سازي مي*گرديد، قطعا MyISAM موتور مناسبي نخواهد بود. البته براي سروري که در مقياس بزرگ با موتور InnoDB کار مي*کند، بايد منابع سيستمي مناسبي تهيه کرد.