MyISAM و Innodb هما database Engines يمكن المفاضلة بينهما وفقاً للتطبيق المستخدم فى قاعدة البيانات , فالمعروف أن MyISAM هى الأسرع بينما Innodb هى الأكثر أماناً حيث يتوفر فيها شروط يطلق عليها الـ ACID و هى تلك الشروط اللازمه فى الأمور الخاصة بعمليات الدفع و الشراء عبر الإنترنت و لتوضيح المقصود بال ACID سأطرح هذا المثال :
إذا كنت تريد حجز تذكرة طائرة لفردين , ف فلابد من أن تقوم بحجز مقعدين , إذا حدثت مشكلة فى قاعدة البيانات أثناء عملية تسجيل طلبك فلا يصح أبداً أن يتم حجز تذكرة واحده لك و الأخرى لم تتمكن قاعدة البيانات من إتمامه , لذلك فإن إستخدام MyISAM فى هذه الحالة قد يؤدى لوقوع مثل هذه المشكلات , أم إستخدام Innodb فإنه يحول بين وقوعها إما بحجز المقعدين أو عدم إتمام الحجز أسااساً
و ال ACID هو إختصار لـ : Atomicity, Consistency, Isolation, Durability
و ال Atomicity هى المصطلح الذى يشير إلى المثال المطروح بالأعلى و بقية المصطلحات تشير إلى :
Consistency : الثبات و عدم قابلية الإنتهاك و ألا يتم أمر تسجيل فى قاعدة البيانات طرأ عليه تغيير أثناء أرسال الأمر لها
Isolation : العزل و هى الطريقة التى تحدد كيفية تأثر العمليات المرتبطة بالعملية التى تم تغييرها
Durability : قوة التحمل و هى تجعل قاعدة البيانات أكثر تحملاً للطلبات المرسلة و حفظها حفظاً نهائياً حتى لو تحطم النظام و حدث خلل فيه فطالما أنك حصلت على تأكيد بإتمام العملية فكن على ثقة أنه تم حفظها
فمتى تستخدم كل منهما فى تطبيقاتك ؟
التعليقات
لا أفضّل أحدهما على الآخر، فلكل نوع ميزاته.
أستخدم MyISAM عندما أريد استخدام الجدول في إدخال البيانات بشكل أساسي (لنفترض أن الجدول هو سجل - Log)، يكون استخدامه لإدخال البيانات أكثر من تعديلها.
وأستخدم InnoDB في الجداول الكبيرة التي تحوي علاقات أكثر والتي سيتم عليها عمليات تعديل بشكل مستمر.
الجواب باختصار ودون تفكير هو InnoDB وهو صالح لكل التطبيقات.
القصة الطويلة: طور محرك InnoDB من قبل شركة متخصصة ليكون أسرع حيث أن القفل فيه يحد السجل أو الصف row-level lock وليس كل الجدول (بعكس MyIsam)
وهو أيضا محرك صحّاف (ذاتي التعافي) لكن الأهم من ذلك كله هو دعمه الحقيقي لإلزام العلاقات ومبدأ ACID.
في المقابل كانت وثائق MySQL لا تنصح به لسبب واضح وهو أنه من شركة منافسة وليس مكون أصيل (تماما كما تفقد الكفالة عند استعمال بطارية غير أصلية في الجوال). لاحقا اشترت شركة صن/أوراكل الشركة المنتجة ل InnoDB فأصبح المحرك أجذع ناس وينصح به وكفاءة.
قمنا بتجربته عندنا وكان يعطي سرعة عالية وموثوقية أكبر معا وليس شيء على حساب شيء.
في حين تجربتي مع MyIsam كانت سيئة وكان علينا تنفيذ ما يشبه scan disk من فترة لأخرى على مستوى المحرك (عبر أداة اسمها myisamchk)
بعض التطبيقات المشهورة لم تصمم كي تدعم الإلتزام بالعلاقات مما يمنعك من الإنتقال إلى InnoDB مثلا إذا كان عندك جدول اسمه تعليق comment يحتوي على user_id تشير بعلاقة إلى id في جدول المستخدمين user وكان في جدول التعليقات إشارة إلى معرف مستخدم تم حذف المستخدم المشار إليه (يعني هذا تعليق كتبه المستخدم رقم 7 ولا يوجد مستخدم رقم 7) عندها لا يمكنك التحول إلى InnoDB لأنها تتحقق من سلامة المفاتيح الأجنبية foreign keys
كذلك إن كان التطبيق يعمل على إضافة تعليق ووسمه في جدول الوسوم tags لكن يقوم بذلك بترتيب خاطئ يعني يضع الوسم ثم التعليق فإنه سيعمل في MyIsam ولن يعمل في InnoDB لأنها لن تسمح بالمرحلة البينية التي يكون فيها سجل يشير إلى تعليق غير موجود بعد.
اللينك دى هتفيدك :