7 Stimmen

Mehrere Datenbanken im Vergleich zu einer einzigen Datenbank

Ich schaue mir eine bestehende Website an, und dort werden getrennte Datenbanken verwendet. Die Datenbanken scheinen auf folgende Weise eingerichtet zu sein:

  • allgemeine Typen (user_type, Sprache, Alter, etc.)
  • Mitgliederdaten (Registrierungsinformationen & Login)
  • Standortkonfiguration

Ich persönlich würde alles in einer Datenbank speichern. Für mich wäre das einfacher, als fast immer den Namen der Datenbank vor jede Tabelle setzen zu müssen.

Ich kann mir vorstellen, dass aus Sicherheitsgründen sichergestellt werden muss, dass niemand versehentlich auf die falschen Daten zugreifen kann, aber auf dieser Website werden Administratoren (etwa 10 % der Benutzer der Website) auf alle Datenbanken zugreifen und datenbankübergreifende Suchen durchführen müssen.

Was könnten die Gründe für die Einrichtung getrennter Datenbanken sein? (Die Website ist in PHP & MySQL.)

Editar: Die Namen der db sind:

  • sitename (der eigentliche Name der Website) (allgemeine Typen)
  • member (Mitgliederdaten)
  • siteconfig (Standortkonfiguration)

1 Stimmen

Ja, das ist verrückt auf niedrigem Niveau. Mehr Arbeit für die Programmierer, aber der Lohn dafür ist mehr Arbeit für die Programmierer.

11voto

Corey Trager Punkte 21897

Reine Spekulation darüber, was sich die Macher dabei gedacht haben:

Vielleicht gibt es einen Unterschied in der Datenmenge, so dass für die verschiedenen physischen Datenbanken eine unterschiedliche Sicherungs-/Replikationsstrategie angewandt werden könnte?

Wäre es nicht denkbar, dass z. B. "allgemeine Typen" von mehreren Anwendungen gemeinsam genutzt werden können, während die "Standortkonfiguration" nur für eine Anwendung spezifisch ist?

Vielleicht wäre es eine Idee, die verschiedenen Datenbanken auf unterschiedliche Hardware zu setzen, die unterschiedliche Leistungsmerkmale haben, wie z.B. ihre RAID-Konfiguration. Daten, die viel gelesen, aber nicht aktualisiert werden, gegenüber Daten, die viel aktualisiert werden.

Auch dies ist reine Spekulation...

@Darryl - meine Antwort ist mehr Archäologie als Technologie. Ich sage nicht, dass ich irgendetwas davon kaufe. Ich versuche nur, mich in die Denkweise der Vorfahren hineinzuversetzen...

1voto

Daniel M Punkte 1507

Auch das ist reine Spekulation: Vielleicht war es eine architektonische Entscheidung, um die Trennung der Bereiche zu unterstützen.

0 Stimmen

Ich bin mit der Terminologie nicht vertraut... können Sie die Bedenken erklären?

0 Stimmen

Korrigieren Sie mich, wenn ich hier falsch liege, aber im Allgemeinen bedeutet es, dass man den Entwurf und die Arbeit trennt und an einen anderen Entwickler weitergibt, um die beste Lösung für das jeweilige Problem zu finden, anstatt eine generische Lösung für alles.

1voto

Lando Punkte 71

Ich sehe keinen Grund, mehrere Datenbanken für die von Ihnen aufgeführten Informationen zu erstellen, insbesondere wenn diese Daten miteinander verknüpft werden müssen. Es hört sich eher so an, als wüsste jemand nicht, wie man mit Berechtigungen umgeht, und statt den Zugriff auf Tabellen zu gewähren, wurden einfach neue Datenbanken angelegt. Es ist nur eine Meinung, aber eine Reduzierung auf nur eine Datenbank wäre wahrscheinlich eine Verbesserung.

1 Stimmen

Es ist erstaunlich, was Unwissenheit bewirken kann. Ich arbeite mit einer Datenbank, die überhaupt keine Primärschlüssel hat. Diese Situation ist entstanden, weil die ursprünglichen Entwickler nicht wussten, wie man Ansichten erstellt.

0 Stimmen

@MusiGenesis Das habe ich verpasst :( Welcher Zusammenhang besteht zwischen dem Fehlen von Primärschlüsseln und der Erstellung von Ansichten?

0voto

Eine solche Frage stellt sich vor allem bei Android (als Referenz)

Arbeiten mit Datenbanken in einer Multimodul-App in Android

Wenn wir eine Anwendung modularisieren, stehen wir vor dem Problem, wo wir unsere Datenbank unterbringen sollen. Es gibt zwar keine bestimmte richtige Methode, aber eine der Implementierungen ist die Verwendung einer einzigen gemeinsamen Datenbank für die gesamte Anwendung. Die andere besteht darin, eine Datenbank für die gemeinsame Kernfunktionalität und dann eine separate für die Funktionsmodule zu erstellen.

Vor- und Nachteile einer einzigen Datenbank

Vorteile:

  1. Einfach zu wartende Datenbankverbindung, da wir nur eine Datenbankverbindung öffnen müssen.
  2. Tische lassen sich leicht gemeinsam nutzen.

Nachteile:

  1. Da es keine Isolierung zwischen den Modulen gibt, müssen wir diese Tabellen umbenennen, um Konflikte zwischen den Modulen zu vermeiden.
  2. In der gemeinsamen Domäne gibt es keine besonderen Einrichtungen. Wir müssen alle Entitäten und Daos in das Kernmodul aufnehmen, das mit der Anwendung geliefert wird.

Vor- und Nachteile einer Datenbank / eines Moduls

Vorteile:

  1. Perfekte Isolierung zwischen den Modulen.

Nachteile:

  1. DB-Verbindungspflege. Wenn wir eine modulübergreifende Abfrage schreiben wollen, ist das komplex.

-1voto

MusiGenesis Punkte 72729

Wenn es einen guten Grund für die Aufteilung einer Datenbank in eine Reihe kleinerer Datenbanken wie diese gäbe, würden die Datenbanken wahrscheinlich Namen wie "hadronsupercolliderrawdata" und "googlebackup_2008" tragen. Namen wie "generaltypes" und "memberdata" lassen vermuten, dass sie einfach von Dummheit übermannt wurden.

2 Stimmen

Gibt es einen Grund dafür, dass Sie das Bedürfnis haben, die Intelligenz eines anderen aufgrund des Designs seiner Anwendung zu beleidigen? Vielleicht waren sie zu Beginn des Projekts/Unternehmens (und wahrscheinlich) unerfahrene Programmierer. Jemanden wegen eines schlechten Designs als "dumm" zu bezeichnen, lässt Sie eher so aussehen.

2 Stimmen

@JM4: Zu sagen, dass ich dumm bin, weil ich jemand anderen dumm genannt habe, ist irgendwie, nun ja, dumm, wenn ich das mal so sagen darf. Zu sagen, dass ich ein Arschloch bin, weil ich jemand anderen dumm genannt habe, wäre völlig korrekt und auch nicht dumm. Was den Kern Ihres Kommentars angeht, so waren sie zu Beginn eines Projekts natürlich unerfahrene Programmierer - daher kommt der meiste schlechte Code.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X