Wenn ich Ihre Anwendung richtig verstehen, vergleichen Sie derzeit zwei Lösungen:
- Erstellen N Datenbanken, jede enthält 1 Tisch, mit 1 Projektdaten
- 1 Datenbank erstellen, mit 1 Tisch, enthaltend N Projekte data
Es ist eine dritte Möglichkeit, (eine zusätzliche Spalte für die ID-Projekt erfordert), die
ist
- 1 Datenbank erstellen, die N-Tabellen, die jeweils 1 Projekt
Leistung: Der Performance-Unterschied zwischen (1) und (3) neigen dazu, unbedeutend sein, wenn Sie zu einem bestimmten Zeitpunkt nur auf Daten eines Projekts zugreifen (und alle im Fall von (1) auf demselben Server ausgeführt werden). (3) ist tendenziell schneller und einfacher, wenn Sie auf mehrere Projekte gleichzeitig zugreifen. Thereisaton von Informationen über Stackoverflow den anderen beiden Optionen vergleicht (2) und(3), single-Tabelle vs. Mutiple-Tabelle. Meistens ist der Leistungsunterschied gering, mit guten Indizes, aber nicht unbedeutend.
Skalierbarkeit: Sie geben an, dass jedes Projekt in der Reihenfolge von Tausenden von Zeilen vorhanden ist. Sie geben nicht an, wie viele Projekte es geben könnte. Sie geben auch nicht an, wie oft diese Daten angefordert oder geändert werden müssen. Das Folgende ist nur eine Richtlinie: Moderne Server können problemlos Millionen von Zeilen (bei 1k/Zeile, das sind nur Gigabyte) in einer einzigen Datenbankinstanz verarbeiten und problemlos Tausende von Anfragen pro Minute (bei richtiger Gestaltung) verarbeiten. Sie beginnen zu kämpfen, wenn es um Milliarden von Zeilen oder mehr geht (mehrere Terabyte an Daten) oder multiple thousands of requests per second. Es hängt viel vom Design der Datenbank selbst ab, wann genau Sie die metaphorische Wand treffen werden. Wenn Sie jedoch eine Größe getroffen haben, bei der eine Datenbankinstanz aus Gründen der Größe oder Geschwindigkeit nicht mehr mit ihr umgehen kann, müssen Sie entweder horizontally or vertically skalieren . Die horizontale Skalierung (d. H. Das Hinzufügen weiterer Server) ist mit mehreren Datenbanken einfacher und kostengünstiger. Wenn Sie Ihre Projekte in eine andere Datenbank aufteilen, kann dies zwar einfacher werden, aber eine solche einfache Lösung wird höchstwahrscheinlich dazu führen, dass viele Server nur herumlaufen, während andere heiß laufen. Die meisten modernen Datenbanksysteme ermöglichen die Aufteilung einer einzelnen Datenbank auf mehrere Maschinen sogar innerhalb einer Datenbank.
Am Ende haben Sie nicht genug spezifiziert, um Ihre Frage wirklich zu beantworten. Und von der Art, wie du es geschrieben hast, vermute ich, dass du momentan noch nicht in der Lage bist, eine endgültige Entscheidung zu treffen - du versuchst nur, dich nicht in deinen eigenen Fuß zu schießen. Also hier ist eine kurze Anleitung zu
Wie sich nicht schießen im Fuß
- Separate alle Datenbankzugriffscode aus in einer einzigen Einheit des Codes.
- Halten Sie alle Programmlogik außerhalb des Codes
- das Stück Code halten gut gepflegt und dokumentiert
- auf Ihre Fragen suchen jemanden mit Wissen von mehreren DBMS Lassen sie leicht zu transportieren sind, um sicherzustellen,
Wenn Sie dies tun, können Sie später Datenbanksysteme ändern oder die Partitionierung von Daten ändern, indem Sie nur diese eine Datei ändern. Sie können sogar verschiedene Designs benchmarken, indem Sie nur diese einzelne Codedatei austauschen.
Können Sie genauer sein, was sind die Abfragen, die Sie mit den Daten lesen oder schreiben planen? Der erste Schritt scheint ein "schwerer" Schreibauftrag zu sein, um die Daten einzufügen, wenn möglich in Stapel zu trennen. In welcher DB benutzt du MongoDB, PostgreSQL, andere? –
@RistoNovik Haben Info hinzugefügt. –
Vielen Dank für die zusätzlichen Informationen, wie es scheint nicht üblich CRUD Anwendung mehr wie Daten hinzufügen und dann vergessen. Werden die "Posts" -Daten nur hochgeladen und danach nicht mehr aktualisiert? Wenn dies der Fall ist und die Daten nicht strukturiert sind, warum nicht in komprimierten CSV-Dateien speichern? –