Est-il vrai que le moteur MyISAM est préférable à InnoDB lorsque nous construisons un stockage en cluster? Pourquoi s'il en est ainsi?

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

Question

J'ai entendu cela aujourd'hui lors d'une interview pour un développeur Java. Je devais énumérer quelques avantages de MyISAM par rapport à InnoDB et expliquer pourquoi il est encore largement utilisé. Et ils attendaient de ma part la réponse comme titre de cette question.

Si je comprends bien leur propre réponse: MyISAM n’a pas de clé étrangère et la base de données peut être facilement mise en cluster (une table par serveur, par exemple). Mais pourquoi ne pouvons-nous pas simplement créer des tables InnoDB sans clé étrangère? Cette explication me semble étrange.

Était-ce utile?

La solution

Il n’ya pas de solution miracle ici. Vous devez connaître les avantages et les inconvénients de chacun avant de décider lequel vous utiliserez pour une application particulière.

InnoDB:

  • prend en charge les FK
  • prend en charge les transactions
  • utilise une grande mémoire tampon pour l'opération
  • prend en charge le verrouillage au niveau de la ligne
  • Mais le coût de maintenance est beaucoup plus élevé - vous devez vraiment ajuster votre utilisation de la mémoire, configurer vos fichiers de table, etc.

MyISAM:

  • a un tas de fonctionnalités de colonnes spéciales qu'InnoDB n'a pas, comme:
    • index de texte intégral
    • colonnes spatiales (je suis sûr que cela ne fonctionne pas avec InnoDB)
  • Très rapide pour les cas d'utilisation principale en lecture / ajout (verrous de table pour les mises à jour, les suppressions, mais pas pour les insertions)
  • a aussi généralement des insertions plus rapides
  • met en cache les index en mémoire (tampon de clé), mais repose sur le système d'exploitation pour mettre en tampon les pages de données réelles

Par exemple, j'utiliserais InnoDB pour des activités telles que le commerce électronique, les bases de données utilisateur ou tout ce pour quoi je veux utiliser des transactions.

Pour les entrepôts de données, la journalisation, les rapports, etc., j'utiliserais probablement MyISAM.

Autres conseils

  

J'ai dû lister quelques avantages de MyISAM par rapport à InnoDB

  1. recherche FULLTEXT

  2. ...

  3. non, c'est ça.

(D'accord, il existe des dans certains cas, MyISAM est plus rapide qu'InnoDB, mais rarement suffisant pour pallier le manque de conformité ACID. Aujourd'hui, la principale raison de faire quoi que ce soit avec MyISAM est pour obtenir une recherche en texte intégral qui n’est malheureusement pas supportée par InnoDB.)

Je ne sais pas si ce n'est plus vrai. MyISAM est plus rapide que InnoDB pour les lectures.

De plus, les tables MyISAM sont stockées dans des fichiers séparés et (de ce que je me souviens bien), vous pouvez réellement transférer ces fichiers dans une autre base de données MySQL, ce qui facilite la sauvegarde.

Par défaut, les bases de données InnoDB sont stockées dans un énorme glob sur le système de fichiers.

En ce qui concerne la raison pour laquelle il est encore largement utilisé, j’ai toujours pensé que c’était parce que c’était l’option par défaut. Personnellement, je continue de croire que les avantages d'InnoDB triomphent de MyISAM et que MyISAM a également des problèmes d'intégrité des données dus à mon expérience.

Vous pouvez certainement créer des tables InnoDB sans clé étrangère, mais vous supprimez l’un de ses principaux avantages: l’intégrité référentielle. Cependant, comme MyISAM n’est pas construit avec l’intention de référentiel d’intégrité référentielle, les clés peuvent être stockées différemment, et peut-être plus efficacement.

Il existe également des différences de verrouillage et d'accès. InnoDB prend en charge le verrouillage au niveau de la ligne, alors que MyISAM ne prend en charge que le verrouillage au niveau de la table. Selon les requêtes que vous effectuez (SELECTS ou INSERTS / UPDATES), cela peut avoir un effet notable sur les performances.

Vous devez continuellement lire sur le blog Mysql Peformance .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top