2010-12-15 10 views
3

Je travaille sur un projet où j'insère constamment des lignes dans une table et dans quelques jours cette table va être très grande et je suis venu avec une question et ne peut pas trouver la réponse: ce qui va se passer quand j'ai plus de lignes que 'bigint' dans cette table sachant queComment gérer une grande quantité de données dans une table spécifique d'une base de données

J'ai une colonne 'id' (qui est un int)? Est-ce que ma base de données (MySQL) peut gérer cela correctement? Comment les grandes entreprises traitent-elles ce genre de problèmes et se joignent aux grandes tables?

Je ne sais pas s'il y a des réponses courtes à ce genre de problèmes, mais toute piste pour résoudre ma question serait la bienvenue!

+1

mieux éditer le titre à quelque chose comme "Comment gérer les grandes valeurs d'ID de table avec une grande quantité de données dans une table spécifique d'une base de données". Sinon, cela peut sembler vous demander de gérer la grande quantité de données. –

Répondre

1

numeric data type

Si cette colonne est la clé primaire, vous n'êtes pas en mesure d'insérer plus de lignes.

Si ce n'est pas une clé primaire, la colonne est tronquée à la valeur maximale qu'elle peut présenter dans ce type de données.

Vous devez également remplacer la colonne id par bigint si vous souhaitez effectuer une jointure.

Vous pouvez utiliser uuid pour remplacer la clé primaire entier (pour les grandes entreprises),

prendre note que uuiq est une chaîne, et votre champ ne sera pas plus en numérique

1

C'est l'un des gros problèmes de chaque site web avec BEAUCOUP d'utilisateurs. Pensez à Facebook, combien de demandes reçoivent-ils chaque seconde? Combien de serveurs ont-ils pour stocker toutes les données? S'ils ont de nombreux serveurs, comment séparent-ils les données entre les serveurs? Si elles séparent les données entre les serveurs, comment seraient-ils en mesure d'appeler des requêtes SQL normales sur plusieurs serveurs, puis rejoindre les résultats? Etc. Maintenant, pour éviter de compliquer les choses en répondant à toutes ces questions (ce qui vous fera probablement abandonner :-)), je vous suggère d'utiliser Google AppEngine. C'est un peu difficile au début, mais une fois que vous vous y habituerez, vous apprécierez le temps que vous avez passé à l'apprendre.

Si vous avez seulement une base de données et que vous n'avez pas beaucoup de demandes, et que votre préoccupation est juste le stockage, alors vous devriez envisager de passer à MSSQL ou-meilleur pour autant que je sache.

Espérons que ça aide.

+0

Merci pour votre réponse, mais maintenant j'ai encore plus de questions hehe! J'ai déjà joué un peu avec Google AppEngine et j'envisageais également d'utiliser un service Web Amazong pour gérer mon problème. Mais savez-vous si MySQL ne peut pas gérer plus de lignes que 'bigint'? – MartinMoizard

-1

Les grandes entreprises gèrent en utilisant DB2 ou Oracle

+0

Sans une explication de pourquoi cela aide, cette réponse est inutile. –

+0

Est-ce que tous les commentaires doivent être «utiles» (pas de place pour l'humour ??) - éclaircir Stu – RickyB

5

Vous serait à court de stockage avant épuisé de BIGINT séquence de clé primaire.

Unsigned BIGINT peut représenter une plage de 0 à 18,446,744,073,709,551,615. Même si vous aviez une table avec une seule colonne qui contenait la clé primaire de type BIGINT (8 octets), vous consommeriez (18,446,744,073,709,551,615 × 8) ÷ 1,024^4 = 134,217,728 téraoctets de stockage.

La taille maximale des tables dans MySQL est de 256 téraoctets pour MyISAM et de 64 téraoctets pour InnoDB, donc vous êtes vraiment limité à 256 × 1 024^4 ÷ 8 = 35 trillions de lignes.

Oracle prend en charge NUMBER(38) (prend 20 octets) comme PK le plus grand possible, de 0 à 1e38. Cependant, avoir une clé primaire de 20 octets est inutile car la taille maximale de la table dans Oracle est de 4 * 32 = 128 téraoctets (avec une taille de bloc de 32 Ko).

+0

qui suppose que tous les enregistrements sont en ordre séquentiel (toujours +1) – ajreal

0

Vous pouvez faire votre bigint non signé, vous donnant 18.446.744.073.709.551.615 ID disponibles

1

Pour mettre BIGINT encore plus en perspective, si vous insérez des lignes non-stop à 1 ligne par milliseconde (1000 lignes par seconde), vous avoir 31 536 000 000 de rangs par an.

Avec BIGINT à 18,446,744,073,709,551,615 vous seriez bon pour environ 18 millions d'années.

Questions connexes