C'est semi-hypothétique, et comme je n'ai aucune expérience dans le traitement de tables de base de données massives, je n'ai aucune idée si c'est horrible pour une raison quelconque. Passons à la situation:
Imaginez une application Web - disons un logiciel de comptabilité - qui a 20 000 clients et chaque client a plus de 1000 entrées dans un tableau. C'est 20 millions de lignes qui, je le sais, peuvent certainement ralentir les requêtes complexes.
Dans un cas comme celui-ci, est-il plus logique de créer une nouvelle table dans la base de données pour chaque client? Comment les bases de données réagissent-elles à la présence de 20 000 tables (ou plus!)?
Cela ressemble à une mauvaise idée.
N'essayez pas de déjouer la base de données avec des constructions exotiques comme celle-ci. Les moteurs de base de données sont conçus avec de nombreuses optimisations pour gérer de grands ensembles de données. Par exemple, ce que vous décrivez ressemble énormément à une tentative d'implémentation manuelle des index. Utilisez simplement les index fournis par le moteur de base de données, ils sont implémentés bien mieux que vous ne pourrez probablement le faire vous-même, et cela ne nécessitera pas autant de maintenance.
Aussi, en règle générale. Je suggère de ne pas architecturer une base de données d'une manière qui nécessite la manipulation ou la création de structures de base de données (tables, champs) lors de l'utilisation normale de l'application. Cela rend l'optimisation des performances un ours et vous oblige souvent à donner trop d'autorisations aux utilisateurs pour effectuer des tâches de routine susceptibles de créer des failles de sécurité.
la source
Voici un article que j'invite toujours les gens à lire lorsqu'ils posent cette question:
http://datacharmer.blogspot.com/2009/03/normalization-and-smoking.html
la source
À mon humble avis, une seule table ne devrait pas être un problème, alors ne créez pas de problème là où il n'en existe pas - pour le moment. Vous pouvez faire beaucoup pour améliorer les performances. Vous pouvez partitionner une seule table en plusieurs fichiers en fonction de clientID ou d'un champ de date pour aider avec IO. Votre base de données n'a pas à suivre, optimiser et mettre en cache 20 000 instructions SQL différentes pour chaque requête dont vous aurez besoin. Vous pouvez indexer par clientid. Les clients 20K peuvent payer pour beaucoup de matériel.
Pour ce type de table, une base de données de type NoSQL peut être utilisée.
Avec 20 000 clients, la base de données n'est peut-être pas votre maillon le plus faible, alors pourquoi introduire autant de complexité?
la source
C'est vraiment une mauvaise approche.
Partitionnez la table verticalement, 2 serveurs de base de données, un pour les identifiants d'utilisateurs impairs et un autre pour even, devraient bien fonctionner (les données ne sont pas liées entre les utilisateurs).
Triez les données par user_id et si ce n'est pas possible, obtenez une énorme quantité de disques RAM ou SSD.
la source