Dies ist halbhypothetisch, und da ich keine Erfahrung im Umgang mit massiven Datenbanktabellen habe, habe ich keine Ahnung, ob dies aus irgendeinem Grund schrecklich ist. Weiter zur Situation:
Stellen Sie sich eine webbasierte Anwendung vor - beispielsweise eine Buchhaltungssoftware - mit 20.000 Clients und jedem Client mit mehr als 1000 Einträgen in einer Tabelle. Das sind 20 Millionen Zeilen, von denen ich weiß, dass sie komplexe Abfragen sicherlich verlangsamen können.
Ist es in einem solchen Fall sinnvoller, für jeden Client eine neue Tabelle in der Datenbank zu erstellen? Wie reagieren Datenbanken auf 20.000 (oder mehr!) Tabellen?
Klingt nach einer schlechten Idee.
Versuchen Sie nicht, die Datenbank mit solchen exotischen Konstruktionen zu überlisten. Datenbank-Engines wurden mit vielen Optimierungen für große Datenmengen entwickelt. Zum Beispiel klingt das, was Sie beschreiben, einem Versuch, Indizes manuell zu implementieren, sehr nahe. Verwenden Sie einfach die von der DB Engine bereitgestellten Indizes. Sie sind viel besser implementiert, als Sie es wahrscheinlich alleine können, und erfordern nicht so viel Wartung.
Auch als allgemeine Faustregel. Ich empfehle, eine Datenbank nicht so zu erstellen, dass während der normalen Verwendung der Anwendung eine Manipulation oder Erstellung von Datenbankstrukturen (Tabellen, Felder) erforderlich ist. Dies macht die Leistungsoptimierung zu einem Problem und zwingt Sie häufig dazu, Benutzern zu viele Berechtigungen für Routineaufgaben zu erteilen, wodurch möglicherweise Sicherheitslücken entstehen.
quelle
Hier ist ein Artikel, den die Leute immer lesen sollten, wenn sie diese Frage stellen:
http://datacharmer.blogspot.com/2009/03/normalization-and-smoking.html
quelle
IMHO sollte eine einzelne Tabelle kein Problem sein, also erstellen Sie kein Problem, bei dem es noch keine gibt. Sie können viel tun, um die Leistung zu verbessern. Sie können eine einzelne Tabelle basierend auf der Client-ID oder einem Datumsfeld in mehrere Dateien partitionieren, um die E / A zu unterstützen. Ihre Datenbank muss nicht 20.000 verschiedene SQL-Anweisungen für jede Abfrage, die Ihre Site benötigt, verfolgen, optimieren und zwischenspeichern. Sie können nach Client-ID indizieren. 20.000 Kunden können für viel Hardware bezahlen.
Für diesen Tabellentyp könnte eine NoSQL-Datenbank vom Typ db verwendet werden.
Bei 20.000 Clients ist die Datenbank möglicherweise nicht das schwächste Glied. Warum also so viel Komplexität einführen?
quelle
Das ist wirklich ein schlechter Ansatz.
Partitionieren Sie die Tabelle vertikal, 2 Datenbankserver, einer für ungerade Benutzer-IDs und einer für gerade, sollten gut funktionieren (die Daten sind nicht zwischen Benutzern verknüpft).
Sortieren Sie die Daten nach user_id und wenn dies nicht möglich ist, besorgen Sie sich eine große Menge an RAM- oder SSD-Festplatten.
quelle