نمایش نتایج: از شماره 1 تا 4 , از مجموع 4

موضوع: مقایسه موتور های ذخیره سازی Innodb و MyISAM

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    عضو دائم Mr.Te0 آواتار ها
    تاریخ عضویت
    Oct 2013
    نوشته ها
    1,490
    تشکر تشکر کرده 
    259
    تشکر تشکر شده 
    2,950
    تشکر شده در
    1,526 پست

    Lightbulb مقایسه موتور های ذخیره سازی Innodb و MyISAM



    انجین‌های دیتابیس مای‌اس‌کیو‌ال – MyISAM و Innodb



    دیتابیس MySQL از Table Engineهای متفاوتی پشتیبانی میکند که با عنوان “Table Type” هم شناخته میشوند.
    یک دیتابیس میتواند مخلوطی از table های مختلف با engineهای متفاوت ویا یکسان باشد. برای مشاهده لیست کاملی از انجین‌های موردپشتیبانی دیتابیس MySQL به این صفحه مراجعه کنید.


    اما در بین این انجین‌های مختلف، در سایت‌های طراحی شده بصورت کلاود (cloud) ، از دیتابیس MySQL و دو انجین استفاده میشود: InnoDB و MyISAM.
    توجه داشته باشید در این مقاله قصد دارم بصورت کامل مطالب مرتبط با موارد کاربرد این دو انجین در وبسایت‌های کلاود را پوشش دهم و کاری با performance نخواهم داشت. اگر نیاز به مطالعه مطالب مرتبط با performance دارید, اینجا و اینجا را مطالعه کنید.
    در دیتابیس MySQL 5.0 به بعد ، انجین MyISAM ، بصورت table engine پیش‌فرض استفاده میگردد اما سایت‌های کلاود از انجین InnoDB بصورت پیش‌فرض در طراحی‌هایشان استفاده میکنند. به عبارت دیگر وبسایت‌های کلاود، اگر شما بصورت کاملا واضح توسط DDL نوع انجین خودتان را مشخص نکرده باشید، از InnoDB در DDL* تیبل شما استفاده میکند. با استفاده از InnoDB ، performance نرم‌افزارتان نیز بصورت کاملا محسوسی افزایش خواهد یافت.


    مقایسه:

    MyISAM Innodb
    عدم سازگاری با ACID* و دیتا قابل برگشت نیست (به عبارتی non-transactional* است) پشتیبانی کامل از ACID و دیتای قابل برگشت . انجین transactional* است.
    پشتیبانی کامل از commit و rollback در foreign keyها
    انجین پیش‌فرض در MySQL 5.0 به بالا انجین پیش‌فرض در بعضی سرورهای هاستینگ کلاود و توزیع‌های خاص مانند CloudLinux
    قابلیت فشرده‌سازی داده‌ها را دارد قابلیت فشرده‌سازی داده‌ها را دارد
    هرازگاهی نیاز به repair/rebuild کلیه‌ی indexها و tableها دارد با استفاده از فناوری Auto recovery در صورت کراش کردن، توسط لاگ‌ها خودش را تعمیر میکند
    تغییرات در داده‌ها بصورت لحظه‌ای روی دیسک سرور نوشته‌ میشود. قبل از commit و flush کردن داده‌ها روی دیسک سرور، از یک فاصله رندم یا تعیین‌شده استفاده میکند تا لود سرور بیش از حد بالا نرود.
    هیچ نظمی در هنگام ذخیره‌سازی برروی دیتاهای شما اعمال نمیشود تمامی ردیف‌ها (rowها) در صفحات مختلف توسط primary keyها مرتب میشوند.
    قفل کردن Table هنگام نوشتن داده‌ها قفل کردن ردیف‌ها (rowها) هنگام نوشتن داده‌ها


    مفاهیم مقدماتی بانک اطلاعاتی (برای دوستانی که آشنایی ندارند)


    * transactional و non-transactional چیست؟

    — transactional یعنی سیستم دیتابیس شما از عملیات بازگردانی خودکار rollback و commit پشتیبانی میکند و اگر مشکلی پیش بیاید خودش بصورت اتوماتیک repiar میکند.
    — non-transactional از سیستم rollback و commit اتوماتیک پشتیبانی نمیکند،بخاطر همین پرفرمنس برنامه‌ را افزایش میدهد. اما اگر مشکلی پیش بیاید باید خودتان آستین بالا بزنید.


    * DDL چیست؟
    مخفف Data Definition Language که در واقع شامل عملیات اولیه راه‌اندازی دیتابیس است . این عملیات عبارتند از CREATE , ALTER , DROP , TRUNCATE , COMMENT و RENAME

    * DML چیست؟
    Data Manipulation Language که به اختصار DML نامیده میشود ،‌نامی است که به عملیات دستکاری در داده‌ها اطلاق میشود. این عملیات عبارتند از: SELECT , INSERT, UPDATE, DELETE, MERGE, CALL, EXPLAIN PLAN و LOCK TABLE

    * ACID چیست؟
    مخفف یکتایی، قابلیت اطمینان، انزوا و پایداری (Atomicity, Consistency, Isolation, Durability)، خصوصیتی است که در اکثر پایگاه داده‌ها و در انجام تراکنش‌ها باید پیاده‌سازی شود.این مشخصه در تراکنش‌های بانک‌ها بیشتر مورد توجه قرار می‌گیرد زیرا یک مجموعه عملیات تراکنش باید به شکل یک عملیات در نظر گرفته شود تا تراکنش با موفقیت صورت گیرد به طور مثال تراکنش انتقال وجه از یک حساب به حساب دیگر،باید دو عملیات به شکل کامل انجام شود. شما میتوانید اطلاعات بیشتری از اینجا کسب کنید

    مقایسه‌های بیشتری نیاز دارید؟ به مستندات MySQL نگاهی بیندازید! مستندات InnoDB و مستندات MyISAM


    چه زمانی از MyISAM استفاده کنیم؟

    دلایل مختلفی میتواند وجود داشته باشد که شما MyISAM را بعنوان انجین پیش‌فرض یک table استفاده کنید. اول از همه بخاطر داشته باشید که MyISAM طراحی شد تا متن خام ذخیره کند و برای برنامه‌هایی درنظر گرفته شد که دیتاهایشان به ندرت تغییر میکرد و بیشتر عملیات SELECT روی table انجام میگرفت تا insert ویا update. پس مطمین باشید اگر قرار است دیتای شما به ندرت تغییر کند ولی بسیار خوانده شود، MyISAM سریعترین پیشنهاد موجود برای شماست!
    دلیل دیگری که شاید شما بخواهید بخاطرش از خیر InnoDB بگذرید و MyISAM استفاده کنید ، همین پیشتیبانی نکردن از ACID باعث میشود که سیستم دیتابیس شما عملیات کمتری روی دیتابیس شما انجام دهد و این یعنی پرفرمنس بیشتر.
    بهرحال بهترین راه برای انتخاب انجین دیتابیس، فقط انجام BENCHMARK توسط شخص خودتان میباشد و باید امتحان کنید تا اندازه خمیر دستتان بیاید!


    چه زمانی تغییر انجین از MYISAM به INNODB جزو اوجب واجبات محسوب میشود؟

    خوب! جواب همه در جدول بالا قید شده! هروقت که به امکانات InnoDB نیاز داشتید! امکاناتی مثل رول‌بک‌های اتوماتیک و سازگاری با اسید و تعمیرات اتوماتیک!
    و یا زمانیکه شما بصورت خیلی سخت همانقدر که عملیات SELECT دارید ، برنامه‌تان از سایر گزینه‌های *DML استفاده میکند. مثل INSERT و UPDATE. بهرحال بیاد داشته باشید LOAD سرور شما بالاخواهد رفت پس زیرساخت سخت‌افزاری خود را درنظر بگیرید.
    وقتی هم حس کردید کاربرانتان زیاد شده و دیگر TABLE LOCK گزینه‌ی خوبی نیست و بهتر است در سطح بالاتری مراقب race condition باشید، InnoDB پیشنهاد میشود!



    چطور TABLE هایم را از MYISAM به INNODB تبدیل کنم؟

    به سادگی! با یک خط کد در mysqld یا phpmyadmin:


    کد:
    ALTER TABLE ENGINE=INNODB;

    چطور یک table با انجین پیش‌فرض innoDB بسازم؟


    کد:
    CREATE TABLE  mytable (
      `pk_id` int(11) NOT NULL,
    
      `name` varchar(128) DEFAULT NULL,
      PRIMARY KEY (`pk_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    منبع
    info.mehranfar@gmail.com



  2. تعداد تشکر ها ازMr.Te0 به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. MyISAM یا InnoDB کدام یک بهتره
    توسط entel در انجمن دايرکت ادمين DirectAdmin
    پاسخ ها: 3
    آخرين نوشته: September 22nd, 2016, 13:14
  2. تغییر جداول دیتابیس از MyISAM به InnoDB
    توسط joomla2 در انجمن سوالات و مشکلات
    پاسخ ها: 2
    آخرين نوشته: June 10th, 2016, 10:49
  3. سوال : innodb یا myisam
    توسط raminramz در انجمن سوالات و مشکلات
    پاسخ ها: 2
    آخرين نوشته: November 23rd, 2014, 08:13
  4. تغییر نوع جداول از InnoDB به MyISAM
    توسط Ashkankamangar.ir در انجمن سوالات و مشکلات
    پاسخ ها: 10
    آخرين نوشته: December 7th, 2012, 01:30
  5. myIsam و InnoDB و یک سوال بسیار کلیدی
    توسط konjkav در انجمن مباحث و منابع آموزشی
    پاسخ ها: 0
    آخرين نوشته: November 26th, 2011, 11:12

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •