2010-08-18 5 views
1

Je crée une application qui va stocker un flux (semi) en temps réel de quelques échelles différentes autour d'un certain emplacement. Les poids de chaque échelle seront placés dans un tableau avec seulement autant de lignes que d'échelles. L'application d'échelle alimente la base de données MySQL un nouveau poids chaque seconde, qu'une application web PHP lit toutes les 3 secondes. Il ne semble pas y avoir beaucoup de trafic sur le disque dur, ou si la différence serait négligeable, mais je me demande s'il serait plus efficace ou plus logique d'utiliser une table Memory/HEAP table MyISAM normale.Meilleur moteur de table pour la mise à jour de la table MySQL. MyISAM ou HEAP?

Répondre

1

Eh bien, si vous attendez une grande quantité de données, je pense que vous devez presque aller MyISAM. Vous manquerez probablement de mémoire si vous stockez tout dans une table de mémoire. Sans compter que vous perdrez toutes vos données sur la perte de puissance avec un moteur HEAP (Gardez à l'esprit, vous pouvez le vouloir en fonction de votre cas d'utilisation) ...

+0

Pourquoi MyISAM au lieu de InnoDB? J'ai toujours pensé que MyISAM était un moteur mort parce qu'il y avait tellement d'avantages pour InnoDB (verrouillage de ligne, transactions, etc.). –

+1

MyISAM est significativement plus rapide. C'est le gros avantage. Croyez-le ou non, pour certains cas d'utilisation, le verrouillage au niveau des lignes peut être plus lent que le verrouillage au niveau de la table. Sans oublier que toutes les applications ne nécessitent pas de transactions. – ircmaxell

+0

ircmaxell - êtes-vous familier avec cet article, il est un peu daté maintenant, mais devrait mettre votre droit sur quelques faits http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon -benchmarks-part-1/ –

2

Avec quoi que ce soit de 100 à 1000 de lecture simultanée/écrire des requêtes (pensez à l'utilisation typique de l'OLTP) innodb va surperformer myisam.

Il ne s'agit pas d'observations d'autres personnes, il ne s'agit pas de support transactionnel/acide, mais bien de l'architecture d'innodb qui est de loin supérieure à celle de l'ancien moteur myisam. Par exemple, innodb prend en charge les index de clé primaire groupés http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html. En outre, innodb possède un verrouillage au niveau de la ligne qui est beaucoup plus performant en charge simultanée que le verrouillage du niveau table myisam.

Je pourrais continuer, mais Somone a déjà fourni un très bon résumé des raisons pour lesquelles InnoDB est un meilleur choix pour OLTP: http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB

0

Je sais que cette question est de se daté et vous avez probablement fait une très bonne solution par maintenant, mais je voulais juste faire remarquer à quiconque lirait peut-être que la base de données relationnelle n'est peut-être pas la meilleure façon de résoudre ce problème. Pour moi, cela ressemble clairement à un cas où une base de données de fichiers à plat est la solution idéale. Vous auriez pu vous épargner une tonne de frais généraux en écrivant simplement ces valeurs dans un fichier binaire, puis en utilisant des opérations mathématiques simples pour sélectionner les lignes et les champs.

Questions connexes