هل صحيح أن محرك MyISAM أفضل من InnoDB عندما نقوم ببناء وحدات تخزين مجمعة؟لماذا إذا كان الأمر كذلك؟

StackOverflow https://stackoverflow.com/questions/1647023

سؤال

سمعت هذا اليوم خلال مقابلة لمطور جافا.كان علي أن أذكر بعض مزايا MyISAM مقارنة بـ InnoDB ولماذا لا يزال يستخدم على نطاق واسع.وكانوا ينتظرون أن يسمعوا مني الجواب كعنوان لهذا السؤال.

كما أفهم من إجابتهم الخاصة:لا يحتوي MyISAM على مفاتيح خارجية ويمكن تجميع قاعدة البيانات بسهولة (جدول واحد لكل خادم على سبيل المثال).ولكن لماذا لا يمكننا ببساطة إنشاء جداول InnoDB بدون مفاتيح خارجية؟هذا التفسير يبدو غريبا بالنسبة لي..

هل كانت مفيدة؟

المحلول

لا توجد إجابة سحرية هنا.أنت بحاجة إلى معرفة إيجابيات وسلبيات كل منها قبل أن تتخذ قرارًا بشأن أي منها ستستخدمه في أي تطبيق معين.

إينو دي بي:

  • يدعم FK
  • يدعم المعاملات
  • يستخدم مخزن مؤقت كبير للذاكرة للتشغيل
  • يدعم قفل مستوى الصف
  • ولكن تكلفة الصيانة أعلى بكثير - فأنت تحتاج حقًا إلى ضبط استخدام الذاكرة لديك، وتكوين ملفات الجدول، وما إلى ذلك.

حسابي:

  • يحتوي على مجموعة من ميزات الأعمدة الخاصة التي لا يوفرها InnoDB، مثل:
    • فهارس النص الكامل
    • الأعمدة المكانية (أنا متأكد من أن هذا لا يعمل مع InnoDB)
  • سريع جدًا لحالات استخدام القراءة/الإلحاق الأساسية (تأمين الجدول للتحديثات، والحذف، ولكن ليس للإدراجات)
  • عادةً ما تحتوي أيضًا على إدخالات أسرع
  • يقوم بتخزين الفهارس مؤقتًا في الذاكرة (المخزن المؤقت للمفتاح)، ولكنه يعتمد على نظام التشغيل لتخزين صفحات البيانات الفعلية مؤقتًا

على سبيل المثال، سأستخدم InnoDB لأشياء مثل التجارة الإلكترونية أو قواعد بيانات المستخدم أو أي شيء أرغب في استخدام المعاملات فيه.

بالنسبة لمستودعات البيانات والتسجيل وإعداد التقارير وما إلى ذلك، ربما سأستخدم MyISAM.

نصائح أخرى

كان علي أن أذكر بعض مزايا MyISAM مقارنة بـ InnoDB

  1. بحث النص الكامل

  2. ...

  3. لا تلك هي.

(حسنا، هناك بعض الحالات التي يكون فيها MyISAM أسرع من InnoDB، ولكن نادرًا ما يكون الأمر يستحق تحمل عدم الامتثال لـ ACID.اليوم السبب الرئيسي لفعل أي شيء باستخدام MyISAM هو الحصول على بحث النص الكامل وهو للأسف غير مدعوم في InnoDB.)

وأنا لست متأكدا إذا كان هذا لم يعد MYISAM الحقيقي هو أسرع من ك InnoDB ليقرأ.

وبالإضافة إلى ذلك، يتم تخزين الجداول MYISAM في ملفات منفصلة و(من ما أتذكر) يمكنك نقل الواقع تلك الملفات إلى قاعدة بيانات أخرى الخلية وأسهل للنسخ الاحتياطي.

حسب قواعد البيانات ك InnoDB الافتراضي يتم تخزينها في غلوب واحدة ضخمة على نظام الملفات.

وأما لماذا لا تزال تستخدم على نطاق واسع، وأنا أحسب دائما كان ذلك لأنه هو الخيار الافتراضي. شخصيا، ما زلت أعتقد أن مزايا ك InnoDB الانتصارات MYISAM ولديه MYISAM أيضا مشاكل مع سلامة البيانات من واقع خبرتي.

وأنت بالتأكيد يمكن إنشاء الجداول ك InnoDB دون مفاتيح خارجية، ولكن هذا هو الاستغناء عن واحدة من المزايا الرئيسية لذلك: التكامل المرجعي. ومع ذلك، منذ ليست مبنية MYISAM بقصد مفاتيح الجدول التكامل المرجعي يمكن تخزينها بشكل مختلف، وربما بشكل أكثر كفاءة.

وهناك أيضا بعض الاختلافات في تأمين وصول. ك InnoDB يدعم تأمين مستوى الصف، في حين MYISAM يعتمد فقط التأمين على مستوى الجدول. اعتمادا على الاستفسارات كنت المنفذ (يختار مقابل الملاحق / التحديثات) وهذا يمكن أن يكون لها تأثير ملحوظ على الأداء.

وأنت prolly بحاجة لتقرأ على في ماي الاداء بلوق .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top