De quelle taille est trop grande pour une table MySQL?
J'ai finalement été convaincu de mettre mes petites tables en une seule taille, mais exactement comment grand est trop grand pour une table MySQL?
J'ai une table avec 18 champs. Certains sont TEXT
, certains sont très courts VARCHAR(16)
, d'autres plus VARCHAR(100)
.
Droit maintenant, nous obtenons environ 200 000 lignes par jour, ce qui serait de 6 millions de dollars+ un mois. De quelle taille est-elle trop grande? N'importe comment beaucoup de champs que vous avez, ou simplement des lignes?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de solution générale à la question "de Quelle taille est trop grande ğ de telles préoccupations sont souvent tributaire de ce que vous faites avec vos données et de vos facteurs de performance sont.
Il y a quelques limites fondamentales sur le tableau des tailles. Vous ne pouvez pas avoir plus de 1000 colonnes. Vos dossiers ne peut pas être plus grand que 8k chaque. Ces limites changer en fonction de la base de données du moteur. (Ceux-ci sont pour InnoDB.)
Il semble que vous avez fusionné plusieurs ensembles de données dans une table. Vous avez probablement quelques champs que vous dire de ce jeu de données de ce dossier se rapporte, ainsi que certains champs de données, et quelques informations d'horodatage. Ce n'est pas un très large dossier (à moins que vous soyez connecté, disons, tous les paramètres d'entrée de chaque demande.) Votre principal problème sera avec sélectivité. L'indexation de ce tableau de façon significative sera un défi. Si votre commune de champs peuvent être suffisamment sélectif que vous pouvez utiliser pour obtenir les documents que vous voulez, sans consultation de la table, qui sera un énorme plus. (Cf. table scan)
Pour que le nombre d'enregistrements par jour (en gros, deux une seconde tous les jours, et je suis en supposant que vous avez une charge de pointe période où il est beaucoup plus élevé), vous voudrez également vous assurer que vous examiner plus précisément les optimisations sur l'amélioration de la vitesse d'insertion. En règle générale, plus les index = plus lent insertions. Si vous le pouvez, pensez à archiver hors les enregistrements obsolètes à une autre table entièrement. En avant les lieux de travail, nous avons utilisé des archives de la stratégie des Derniers Mois, Trois Mois, Six Mois précédents, chacun dans des tables distinctes. Une autre idée est de supprimer les anciens enregistrements. De nombreux environnements n'ont tout simplement pas besoin de l'information au-delà d'une certaine date. S'accrochant à la journalisation des enregistrements à partir d'il y a trois mois est souvent trop cher.
Enfin, ne négligez pas les de stockage physique de votre table. Le diluant vos dossiers sont, le moins d'e /s physique doit se produire à lire (ou, d'ailleurs, à insérer) un enregistrement. Vous pouvez stocker vos index sur un autre disque dur physique. Si il y a beaucoup de données redondantes dans vos dossiers le stockage de la table compressée en fait, pourrait être une augmentation de la vitesse. Si vous avez un peu d'argent à dépenser, pensez à la valeur d'un bon RAID, l'entrelacement de vos données.
Donc pour répondre à ta question de base: il y a beaucoup de dossiers, mais avec un œil attentif vers l'accordage, il ne sera pas un problème.
Je pense que cela dépend, en fait. La version de MySQL utilisez-vous, quel système d'exploitation, et êtes-vous à l'aide de MyISAM ou innoDB tables ? C'est différents sur 32-bit et 64-bit trop, et varie en fonction de vos paramètres de connexion. Le Manuel MySQL dit:
Il n'y a plus de détails sur ce que ces limites sont sur cette page.
J'ai une table avec ~98M les lignes et les insertions/suppressions se produire tout au long de la journée. Nous tenir des registres pour une période de 90 jours... j'attends que cette table soit ~100 M des lignes de ce mois. Personnellement, j'aurais conçu le schéma de base de données différemment, mais il a été acheté et nous avons besoin de garder intacts, de sorte que nous n'avons pas l'annulation de tout fournisseur de soutien.
Nous utilisons mysql (réplication MASTER-MASTER) et en effectuant les insertions/suppressions sur un & effectuer les requêtes sur les autres. Cela a vraiment aidé à la performance que les supprime serait de verrouillage de la table et de bloquer les requêtes avant de nous changé à l'aide de la réplication.
Nous sommes ne rencontre pas de problèmes de performances à l'aide de cette mise en œuvre.
J'ai également effectuer une table d'optimiser une fois par semaine...
Le choix du nombre de colonnes à mettre dans une seule table dépend également du type de données sont représentés, et comment beaucoup vous vous souciez de la normalisation. Certaines relations peuvent facilement être représenté par un tableau; d'autres ont besoin d'être fait en plusieurs petites tables, en particulier lorsque vous avez un mélange de l'un-à-un, un-à-plusieurs, et plusieurs-à-plusieurs type de relations dans votre jeu de données.
http://en.wikipedia.org/wiki/Database_normalization
Pas une réponse à la question exacte...
Pourquoi avez-vous été convaincu de mettre vos petites tables dans une grande?
Ce que vous faisiez est appelé "Partitionnement Vertical" et peut être très utile, en fonction de votre situation. Avec de nombreux grands du TEXTE ou des champs de type BLOB, une partition verticale pouvez garder votre plus des données interrogées physiquement ensemble et plus rapide d'accès.
Voir: http://en.wikipedia.org/wiki/Partition_(base de données)
Voir aussi: http://dev.mysql.com/tech-resources/articles/performance-partitioning.html
Pensez à ce que vous devez faire avec le tableau. Si le tableau est purement pour achiving, vous n'aurez jamais besoin de modifier sa structure ou quoi que ce soit. Si vous en avez besoin pour datamining, vous pouvez vous attendre à un changement de sa structure. Essayez par exemple de faire un alter table sur une copie de celui-ci maintenant. Attendons de cette fonction à la baisse de la performance une fois que vous atteignez un certain niveau, où les tables temporaires sont en train de gros pour être stockées dans la mémoire.
J'ai été dans la même situation, où la quantité de données m'a fait impossible de modifier la structure de la base de données. Ce que vous devez faire MAINTENANT est de demander à quelqu'un de créer une base de données sur une machine (c'est à dire une instance EC2) avec la quantité de données que vous attendre à avoir dans les deux ans. Demandez-lui simplement de créer de fausses données dans le même format de tableau. Essayez de travailler avec cette table et décider si la performance est acceptable. Si il n'est pas acceptable, vous devez changer les choses dès que possible.
Si j'étais vous, je voudrais envisager de tester Greenplum ou (GridSQL si vous n'avez pas l'argent à dépenser). Les deux sont basés sur PostgreSQL et l'utilisation de nombreux ordinateurs à travailler ensemble.