Nach diesem Kommentar zu einer meiner Fragen überlege ich, ob es besser ist, eine Datenbank mit X-Schemata zu verwenden oder umgekehrt.
Meine Situation: Ich entwickle eine Webanwendung, bei der ich bei der Registrierung (tatsächlich) eine Datenbank erstelle (nein, es ist kein soziales Netzwerk: Jeder muss Zugriff auf seine eigenen Daten haben und darf niemals die Daten des anderen Benutzers sehen). .
So habe ich es für die vorherige Version meiner Anwendung verwendet (die immer noch unter MySQL ausgeführt wird): Über die Plesk-API mache ich für jede Registrierung Folgendes:
- Erstellen Sie einen Datenbankbenutzer mit eingeschränkten Berechtigungen.
- Erstellen Sie eine Datenbank, auf die nur der zuvor erstellte Benutzer und der Superuser zugreifen können (zur Wartung).
- Füllen Sie die Datenbank
Jetzt muss ich dasselbe mit PostgreSQL tun (das Projekt wird ausgereift und MySQL ... erfüllt nicht alle Anforderungen).
Ich muss alle Datenbanken / Schemasicherungen unabhängig voneinander haben: pg_dump funktioniert auf beide Arten einwandfrei und für Benutzer, die so konfiguriert werden können, dass sie nur auf ein Schema oder eine Datenbank zugreifen.
Angenommen, Sie sind erfahrenere PostgreSQL-Benutzer als ich. Was ist Ihrer Meinung nach die beste Lösung für meine Situation und warum?
Wird es Leistungsunterschiede bei der Verwendung der $ x-Datenbank anstelle von $ x-Schemas geben? Und welche Lösung ist in Zukunft besser zu warten (Zuverlässigkeit)?
Alle meine Datenbanken / Schemata haben immer die gleiche Struktur!
Für das Sicherungsproblem (mit pg_dump) ist es möglicherweise besser, eine Datenbank und viele Schemas zu verwenden und alle Schemas gleichzeitig zu sichern: Das Wiederherstellen ist ganz einfach. Laden Sie den Hauptspeicherauszug in einen Entwicklungscomputer und sichern Sie dann nur das benötigte Schema: dort ist ein zusätzlicher Schritt, aber das Dumping des gesamten Schemas scheint schneller zu sein als das Dumping nacheinander.
UPDATE 2012
Nun, die Anwendungsstruktur und das Design haben sich in den letzten zwei Jahren sehr verändert. Ich verwende immer noch den one db with many schemas
Ansatz, habe aber immer noch eine Datenbank für jede Version meiner Anwendung:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Bei Sicherungen speichere ich regelmäßig jede Datenbank und verschiebe sie dann auf dem Entwicklungsserver.
Ich verwende auch das PITR / WAL-Backup, aber wie ich bereits sagte, muss ich wahrscheinlich nicht alle Datenbanken auf einmal wiederherstellen. Daher wird es wahrscheinlich in diesem Jahr verworfen (in meiner Situation ist dies nicht der beste Ansatz ).
Der One-DB-Many-Schema-Ansatz hat seitdem für mich sehr gut funktioniert, auch wenn die Anwendungsstruktur komplett geändert wurde:
Fast hätte ich vergessen: Alle meine Datenbanken / Schemata haben immer die gleiche Struktur!
... jetzt hat jedes Schema seine eigene Struktur, die sich dynamisch ändert und auf den Datenfluss des Benutzers reagiert.