web-dev-qa-db-fra.com

Combien de lignes sont «trop nombreuses» pour une table MySQL?

Duplicata possible:
Combien de lignes dans une base de données sont TROP MANY?

Je construis le schéma de base de données pour une application qui aura des utilisateurs, et chaque utilisateur aura de nombreuses lignes dans des tables de relations telles que "favoris". Chaque utilisateur peut avoir des milliers de favoris et il peut y avoir des milliers d'utilisateurs enregistrés (au fil du temps).

Étant donné que les utilisateurs ne sont jamais supprimés, car cela laisserait d'autres entités orphelines ou les supprimerait également (ce qui n'est pas souhaité), et donc ces tables continueront de croître pour toujours, je me demandais si les tables résultantes pouvaient être trop grandes ( par exemple: 1kk lignes), et je devrais m'inquiéter à ce sujet et faire quelque chose comme marquer les utilisateurs anciens et inactifs comme supprimés et supprimer les relations qui les affectent uniquement (telles que les favoris et autres préférences).

Est-ce la voie à suivre? Ou mysql peut-il facilement gérer des lignes de 1kk dans une table? Y a-t-il une limite connue? Ou est-il entièrement dépendant du matériel?

34
HappyDeveloper

Je suis d'accord avec Klennepette et Brian - avec quelques mises en garde.

Si vos données sont intrinsèquement relationnelles et soumises à des requêtes qui fonctionnent bien avec SQL, vous devriez pouvoir évoluer vers des centaines de millions d'enregistrements sans nécessiter de matériel exotique.

Vous devrez investir dans l'indexation, le réglage des requêtes et faire le sacrifice occasionnel au modèle relationnel dans l'intérêt de la vitesse. Vous devriez au moins faire un signe de tête lors de la conception des tables - préférant les entiers aux chaînes de clés, par exemple.

Toutefois, si vous avez des exigences centrées sur le document, avez besoin d'une recherche de texte gratuite ou avez de nombreuses relations hiérarchiques, vous devrez peut-être réexaminer.

Si vous avez besoin de transactions ACID, vous pouvez rencontrer des problèmes d'évolutivité plus tôt que si vous ne vous souciez pas des transactions (bien qu'il soit peu probable que cela vous affecte en pratique); si vous avez des transactions longues ou complexes, votre évolutivité diminue assez rapidement.

Je recommanderais de construire le projet à partir de zéro en tenant compte des exigences d'évolutivité. Ce que j'ai fait dans le passé, c'est mettre en place un environnement de test rempli de millions d'enregistrements (j'ai utilisé DBMonster, mais je ne sais pas si c'est toujours le cas), et tester régulièrement le code de travail en cours par rapport à cette base de données en utilisant des outils de test de charge comme Jmeter.

24
Neville Kuyt

Voici un exemple qui montre ce qui peut être réalisé en utilisant un schéma innodb bien conçu/normalisé qui tire parti des index de clé primaire en cluster d'innodb (non disponible avec myisam). L'exemple est basé sur un forum avec des threads et a 500 millions de lignes et des durées d'exécution de requête de 0,02 seconde sous charge.

MySQL et NoSQL: Aidez-moi à choisir la bonne

7
Jon Black

Des millions de lignes, c'est bien, des dizaines de millions de lignes, c'est bien - à condition d'avoir un serveur décent même à distance, c'est-à-dire quelques Go de RAM, beaucoup d'espace disque. Vous devrez vous renseigner sur les index pour une récupération rapide, mais en termes de capacité de MySQL à le gérer, pas de problème.

6
Brian

Cela dépend principalement du matériel, mais cela dit, MySQL évolue assez bien. Je ne m'inquiéterais pas trop de la taille de la table, si cela devient un problème plus tard, vous pouvez toujours utiliser partitionnement pour soulager le stress.

4
klennepette