PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : MyISAM یا InnoDB کدام یک بهتره



entel
September 22nd, 2016, 00:03
سلام دوستان من دیتابیس سایتم InnoDB هست یعنی این فرمتی هست مخاستم ببینم فرمتش رو به MyISAM تغییر بدم در سرعت و کارارایش تاثیر میزاره یا نه اگه نظر همگی اینکه MyISAM بهتره چطوری باید حین ایمپورت دیتابیس با فرمت MyISAM ایمپورت کنم یعنی دستورش چیه که بعد ایمپورت تو پی اپ پی ما ادمین فرمت تیبل ها MyISAM بشن چون دستی نمیشه اینهمه تیبل رو به MyISAM تغییر داد راستش الان فرمت تیبل ها InnoDB هست که خیلی کرش میشه یا ارور داریم کند هم هست میخاستم به MyISAM تغییر بدم ولی میخام نظر شما رو هم بدونم و اینکه بگید دستور تغییر فرمت در ایمپورت دیتابیس به فرمت MyISAM چیه خیلی ممنون میشم راهنمایی بفرمایید

kiava
September 22nd, 2016, 00:26
سلام دوستان من دیتابیس سایتم InnoDB هست یعنی این فرمتی هست مخاستم ببینم فرمتش رو به MyISAM تغییر بدم در سرعت و کارارایش تاثیر میزاره یا نه اگه نظر همگی اینکه MyISAM بهتره چطوری باید حین ایمپورت دیتابیس با فرمت MyISAM ایمپورت کنم یعنی دستورش چیه که بعد ایمپورت تو پی اپ پی ما ادمین فرمت تیبل ها MyISAM بشن چون دستی نمیشه اینهمه تیبل رو به MyISAM تغییر داد راستش الان فرمت تیبل ها InnoDB هست که خیلی کرش میشه یا ارور داریم کند هم هست میخاستم به MyISAM تغییر بدم ولی میخام نظر شما رو هم بدونم و اینکه بگید دستور تغییر فرمت در ایمپورت دیتابیس به فرمت MyISAM چیه خیلی ممنون میشم راهنمایی بفرمایید

موتور ذخیره سازی چه وظایفی دارد؟
موتورهای ذخیره سازی مسئول ایجاد، بروزرسانی، حذف و مشاهده اطلاعات (CRUD)در جداول پایگاه داد می باشند. در پایگاه داده MySQL دو موتور ذخیره سازی InnoDB و MyISAM وجود دارد که در بخش های بعد تفاوت های آنها بررسی می گردد.
سرعت دسترسی به داده ها
هر جدول InnoDB یک اندیس خاص بنام اندیس خوشه ای (clusterd index) دارد که رکوردها در آن ذخیره می شوند. دسترسی به داده ها از طریق اندیس جستجو به این علت سریعتر است که داده های هر رکورد و اندیس جستجوی آن در یک صفحه قرار دارند. در جداول بزرگ، ساختار اندیس خوشه ای اغلب باعث کاهش عملیات I/O نسبت به ساختارهایی که اندیس و داده در صفحات متفاوتی قرار دارند می شود. MyISAM از یک فایل جهت ذخیره رکوردها و فایل دیگری جهت اندیس ها استفاده می کند.
در InnoDB اندیس خوشه ای بر اساس کلید اصلی ایجاد می شود. در بخش اندیس های ثانویه (secondary indexes) نیز InnoDB عملکرد بهتری دارد. این اندیس ها علاوه بر ستون های خود، ستون های کلید اصلی را نیز در بر می گیرند و InnoDB از مقدار کلید اصلی برای جستجو در اندیس خوشه ای استفاده می کند.
در MySQL جهت افزایش سرعت و کارایی، داده ها در بافرهای حافظه کش می شوند. MyISAM از بافرهای خاصی بنام Key cache به منظور کش کردن اندیس ها استفاده می کند و برای کش کردن داده های دیگر از بافرهای حافظه سیستم عامل استفاده می کند. در مقابل InnoDB اندیس ها و داده ها را در فضایی موسوم به buffer pool و در قالب درخت های B-Treeکش می کند.
پشتیبانی از تراکنش ها
طراحی InnoDB بر اساس مدل ACID است که تراکنش ها با قابلیت هایی همچون commit ، roll back و بازیابی در زمان کرش را پشتیبانی می کند. در InnoDB با فعال بودن حالت autocommit ، تمام فعالیت کاربر درون تراکش انجام می گیرد. اگر autocommit فعال نباشد می توان بصورت دستی از commit و roll back استفاده نمود. Commit تغییرات انجام شده در تراکنش فعلی را بصورت دائمی ثبت می کند و roll back تمام تغییرات تراکنش جاری را لغو می کند.
در مقابل، موتور MyISAM از تراکنش ها پشتیبانی نمی کند.
موازی سازی
یکی از مشکلات بزرگ MyISAM نداشتن قابلیت قفل کردن سطح ردیف داده است. در InnoDB هنگامی که تعداد زیادی عملیات نوشتن وجود دارد با توجه به قفل سطح ردیف، این عملیات می توانند بطور همزمان اجرا شوند اما قابلیت قفل کردن سطح جدول در MyISAM اجازه چنین کاری را نمی دهد. InnoDB در سطوح بالای موازی سازی مشکل قفل کردن دو به دو ناسازگار را دارد ولی باز هم برای این موضوع استفاده می شود.
پایداری و نگهداری
دیتابیس ها در اثر کرش کردن یا خراب شدن سخت افزار ممکن است دچار آسیب دیدگی شوند. موتور MyISAM بسادگی تحت تاثیر این عوامل قرار می گیرد و بدلیل عدم وجود مکانیزمی که به یکپارچه سازی داده ها کمک کند، نیاز به repair دارد و ضمنا هیچ ضمانتی برای بازیابی کامل داده ها وجود ندارد. اما InnoDB بگونه ای طراحی شده که دوام و پایداری را تضمین کند و خصوصا هنگام وقوع مشکلات سخت افزاری تا حد زیادی خرابی داده ها را کاهش می هد.
ایجاد فایل های پشتیبان (Back-up)
در InnoDB می توان بسادگی در حین فعالیت دیتابیس نسخه پشتیبان تهیه کرد. به این روش اصطلاحا hot back-up گفته می شود. اما در MyISAM ایجاد فایل پشتیبان منجر به قفل شدن جداول و Read only شدن آنها می گردد. در مقیاس بزرگ تکنیک replication و ایجاد یک سرور دیگر برای غلبه بر این مشکل MyISAM بکار می رود.
در تکنیک replication یک سرور Master و چندین سرور Slave داریم. تمام عملیاتی که منجر به تغییر دیتابیس می شوند فقط بر روی سرور Master اجرا شده و یک log از آنها ایجاد می شود. سپس سرورهای Slave به کمک این log خود را با سرور Master سینک (همگام) می کنند. در حالت معمول سرورهای Slave تنها جهت خواندن اطلاعات استفاده می شوند. هر یک از سرور های Slave نقش یک نسخه پشتیبان از اطلاعات دیتابیس را دارند و راهکاری جهت حل مشکل پشتیبان گیری آنلاین موتور MyISAM محسوب می گردد.
تفاوت های دیگر
· ذخیره تعداد رکوردها
در InnoDB بر خلاف MyISAM تعداد رکوردها ذخیره نمی شود و از دستور count جهت تعیین تعداد رکوردها استفاده می شود. استفاده از این دستور با شرط where معمول است اما بدون این شرط زمانبر است و بهتر است روش های جایگزین استفاده گردد.
· خاصیت Full text در اندیس ها
جستجوی Full text برخلاف like که بر روی کاراکترها عمل می کند، پرس و جو را روی کلمات انجام می دهد. بعنوان مثال اگر در جستجوی یک ترکیب بر روی چندین میلیون رکورد باشیم، با like ممکن است چندین دقیقه ولی با Full text search طی چند ثانیه انجام می شود.
در تمام نسخه های MyISAM، اندیس ها از Full text پشتیبانی می کنند اما تنها از MySQL 5.6.4 به بعد در موتور InnoDB می توان از جستجوی Full text بر روی اندیس ها بهره گرفت. در حال حاضر بصورت گسترده از این خاصیت InnoDB استفاده نمی شود.

iHSG
September 22nd, 2016, 08:15
سلام
تاثیر هم بذاره آنچنان محسوس نیست که مثلاً بگید چقدر عالی شد :)
این دو تا بیشتر در داده های خیلی سنگین و دیتابیس های بزرگ تفاوت خودشون رو نشون میدن نه در پروژه های کوچک یا مثلاً یه سایت وردپرسی.

alimosavi
September 22nd, 2016, 13:14
شما از InnoDB استفاده کنید .