Note: J'ai cherché d'autres questions similaires ici, et aucune des autres questions répondues n'est même semblable à distance. Avec ça ... J'ai une question à propos des tables MySql (plus précisément, sur des champs spécifiques d'une table, c'est-à-dire tweets
ou updates
).
Alors la question ... quel est le nombre maximum de lignes sur une table InnoDB? C’est-à-dire s’il existe une différence significative entre les montants que MyIsam, InnoDB et d’autres peuvent détenir, s’ils ne le sont pas, alors en général. Deuxièmement, si le tableau devient vraiment volumineux, quels sont les meilleures pratiques pour stocker les données (une seule table ou plusieurs/plusieurs tables/dbs)?
J'ai lu que Twitter reçoit environ 100 millions de tweets par jour. Dans le même contexte, comment ma deuxième question s’appliquerait-elle à quelque chose comme Twitter?
http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html vous permettra de calculer des restrictions à partir de la taille de votre clé.
Mais je suggère humblement que vous ne souhaitiez pas stocker des informations telles que les tweets dans un moteur transactionnel à intégrité référentielle et d'autres fonctionnalités d'InnoDB, et vous certainement ne les stockez pas dans une seule table dans une seule base de données. exemple. Vous les mettez dans de très nombreuses bases de données indépendantes non SQL qui vous permettent d’ajouter rapidement, puis d’extraire des méta-informations (telles que des hashtags, des RT, etc.) dans une base de données plus complexe. Les présentations sur l'architecture de base de données Twitter sont faciles à rechercher sur Google (par exemple http://www.slideshare.net/nkallen/q-con-3770885 ).
Si vous devez stocker de grandes quantités de données dans une seule table, le partitionnement est votre ami et peut-être mieux pris en charge par Postgres. Une table partitionnée est physiquement plusieurs tables qui ressemblent logiquement à une seule table. Vous placez ces sous-tables (partitions) sur différents disques, vous y effectuez indépendamment la maintenance, etc. De plus, un "schéma en étoile" avec une très longue table contenant uniquement des colonnes essentielles et plusieurs tables stockant des colonnes plus grandes mais facultatives peut Aidez-moi.
Il n'y a pas de limite de lignes, mais une taille limite sur une base de données InnoDB:
La taille minimale de l'espace table est de 10 Mo. La taille maximale de l'espace table est de quatre Milliards de pages de base de données (64 To). C'est également Également la taille maximale d'une table.
Vous pouvez toujours partitionner horizontalement vos tables en stockant des lignes dans plusieurs partitions de la même table, dans plusieurs fichiers.
La limite de 64 To pour une table comporte les exceptions suivantes:
innodb_page_size = 16K
(valeur par défaut). Cela peut être réglé à des puissances de 2 comprises entre 4K et 64K, en modifiant proportionnellement la limite d'espace de table.PARTITIONed
est essentiellement un groupe de «sous-tables» organisées ensemble et agissant comme une grande table. La limite antérieure à 5.6.7 sur le nombre de partitions était de 1024. Après cela, elle était de 8192. Donc multipliez les 64 To par cela.OK, cela ne vous donne qu'un octet limite. En outre, il inclut les frais généraux et les index. Vous devez ensuite diviser par la taille d'un enregistrement moyen pour obtenir le nombre maximal de lignes.
(Il n'est pas facile de calculer la taille moyenne des enregistrements.)
Réponse simple:
Vous pouvez probablement facilement obtenir 1 billion de "petits" enregistrements dans une table InnoDB. Avec quelques efforts, vous pourriez atteindre 1 000 milliards de dollars. Mais je soupçonne que votre budget pour les lecteurs de disque serait épuisé avant cela. En outre, il faudrait des années pour faire le INSERTs
pour le remplir!
Donc, réponse réaliste: MySQL peut gérer un nombre "illimité" de lignes.
Vrai vie? J'ai entendu parler de quelques tables avec plus d'un milliard de lignes, voire 15 milliards.
Voir mon Limits , mais il n'en dit pas plus sur la question des rangées.