2010-10-12 18 views
3

J'ai une table où je ne fais qu'écrire. Pensez-y comme une liste de "transactions", où je garde tous les détails, et j'ai aussi un "total" stocké dans une autre table. Ce total est redondant, pour les performances, mais il peut être recalculé si nécessaire à partir de cette table de transactions. Quoi de mieux du point de vue des performances, en gardant à l'esprit que plusieurs personnes seront simultanément INSERTing (jamais UPDATEing) à cette table, qui n'est jamais lue?Devrais-je utiliser InnoDB ou MyISAM pour une table "en écriture seule"?

Devrais-je utiliser InnoDB ou MyISAM?

(je suis déjà des problèmes de performance ici, je ne suis pas optimiser prématurément)

Répondre

4

Utilisez la méthode de stockage des archives pour cela. C'est précisément ce genre d'application d'écriture-lecture-presque-jamais.

+0

Merci pour cette idée! Je ne connaissais pas le moteur d'archivage. Maintenant, à partir de cet article, il semble que cela va économiser de l'espace disque, mais ce ne sera pas beaucoup plus rapide que MyISAM, correct? –

+0

ARCHIVE sera plus rapide que myISAM pour l'écriture. Mais, si vous devez le lire, il sera assez lent car tout est un scan de table complet. Votre explication de l'application indique que vous lirez très rarement, donc cela devrait être OK. –

2

Habituellement, vous utiliseriez MyISAM pour les tables qui ne font que grossir. MyISAM a aussi l'avantage de supporter les tables MERGE, donc vous n'avez pas besoin d'avoir une seule table énorme.

Mais, si vous n'allez jamais "lire", pourquoi utiliser une table? Il suffit d'écrire directement dans un fichier. Je suis curieux de savoir quels sont vos problèmes de performance. Vous pourriez regarder dans le type de table Blackhole avec la réplication. Blackhole sur le maître, MyISAM ou Archive sur l'esclave.

+0

Merci pour votre réponse. J'aurais peut-être envie de le lire, et ça va être beaucoup plus pratique de le faire à partir d'une table structurée plutôt que d'un fichier. Bien sûr, si une telle table n'est pas pratique, je peux aller dans un dossier, mais cela ne semble pas être le cas, compte tenu du volume que je gère. Quant à Blackhole, nous ne faisons pas encore de réplication, juste un MySQL. –

+0

Le problème de performance est que, parfois, l'ensemble du serveur MySQL se bloque pendant plusieurs secondes, retardant TOUTES les autres demandes, et en passant par les "logs de requête lente", cette requête semble apparaître beaucoup, donc elle semble suspecte, même si elle être raisonnablement innocent ... –

+0

Cela ressemble à une impasse? – yfeldblum

0

Vous pouvez également utiliser MyISAM avec INSERT DELAYED pour retourner instantanément à partir de votre insertion et avoir mysql insérer ces données lorsqu'il est inactif dans un thread séparé. Cela accélérerait l'insertion du point de vue de l'application, évitant ainsi les conflits d'insertion. Cependant vous ouvre à des données incohérentes si le serveur s'est écrasé avant d'écrire ...