Frank Dell: Alles in eine Datenbank? Oder mehrere DB?

Hallo Forum,

ich habe ein CMS entwickelt, daß ich über eine monatliche Umlage an verschiedene Interessenten (bisher 10) "vermiete". Alle Kundenaccounts laufen sind über eine eigene Internetadresse zu erreichen und durch vielfältige Einstellungen auch sehr individuell gestaltbar. Dennoch basieren alle Accounts auf identischen Scripten die zentral im Dateisystem hinterlegt sind. Das CMS-System ist also sehr eng mit dem Server verflochten und und läuft auch nur auf diesem. Das vereinfacht natürlich die Pflege und Weiterentwicklung, weil alle Kundenaccounts gleichermaßen unmittelbar angesprochen werden.

Und wenn ich jetzt Veränderungen/Weiterentwicklungen an den Scripten vornehme muß bzw. will ich natürlich auch Änderungen an der dazugehörigen MySql-Datenbankstruktur vornehmen. Und da fängt das Problem an: Während die Scripte für alle Accounts identisch sind, gibt es für jeden Kunden eine eigene Datenbank, die von der Struktur jedoch überall identisch ist (mit jeweils 19 Tabellen). Bei Veränderungen muß ich also derzeit zehn Datenbanken anpassen. Das ist arbeitsaufwendig und die Fehlerquote ist auch relativ hoch.

Ursprünglich hatte ich die Konzept (je CMS-Account eine eigene Datenbank) gewählt, weil ich mir davon eine eine bessere Performance versprochen habe. Mittlerweile machen mir aber die Nachteile (siehe oben) zu schaffen und ich überlege, die einzelnen Datenbanken in eine einzelne zu überführen (Es sollen ja noch mehr Kunden dazukommen). Ich müßte lediglich für jeden Account eine Account_ID festlegen und die jeweiligen Datensatz-IDs nach einem bestimmten System konvertieren.

Jetzt interessiert mich Eure Meinung. Ist es sinnvoll, daß gesamte CMS-System mit allen Accounts auf einer Datenbank laufen zu lassen? Oder sollte es weiterhin für jeden Account eine Datenbank geben? Wie kann ich die Datenbankstrukturen dann aber effektiv synchronisieren? Wie wären die Performance-Verluste bei einer "großen" Datenbank zu beurteilen. Und welche Größe sollte eine MySql-Datenbank nach Möglichkeit nicht überschreiten?

Ich freue mich auf Eure Antworten ;-)

Viele Grüße

Frank Dell

  1. Ich kann Dir leider keine wirklich kompetente Antwort geben (dafür melden sich bestimmt noch ein paar andere) - aber wenn du PHPmyAdmin benutzt; kann man dort nicht die Struktur Tabellen- und auch Datenbankübergreifend verändern?
    Also eine Veränderung vornehmen und diese für jeweils definierte Bereiche mitübernehmen?
    Oder täusch ich mich da?

    Ansonsten, es wäre bestimmt bei 10 Kunden kein Problem das Ganze in einer Datenbank laufen zu lassen - aber wenn es dann 20 oder 30 werden - irgendwann werden sich dann auf der Seite die Nachteile zeigen...

  2. Hallo

    Jetzt interessiert mich Eure Meinung. Ist es sinnvoll, daß gesamte CMS-System mit allen Accounts auf einer Datenbank laufen zu lassen? Oder sollte es weiterhin für jeden Account eine Datenbank geben? Wie kann ich die Datenbankstrukturen dann aber effektiv synchronisieren?

    Frage: Die Datenbanken (oder einige Tabellen in diesen) sind zur Verwaltung der mittels des CMS eingebundenen Inhalte da? Die notwendigen Änderungen an den DBs hängen also mit den Aänderungen im CMS zusammen? Warum dann nicht mit einem Skript die Datenbanken bzw. die betreffenden Tabellen ändern? Die Zugriffsdaten für sämtliche DBs sollten dir ja vorliegen.

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. Hallo "Auge";

      Frage: Die Datenbanken (oder einige Tabellen in diesen) sind zur Verwaltung der mittels des CMS eingebundenen Inhalte da?

      Ja, eine universelle Datenbank, auf die alle Accounts zugreifen gibt es bisher nicht. Allerdings plane ich ein "Hilfe- und Supportbereich". Diese Angaben sollen dann aus einer zentralen DB kommen.

      Die notwendigen Änderungen an den DBs hängen also mit den Aänderungen im CMS zusammen?

      Ja, genau. Da ich momentan alles manuell ändere (via phpMyAdmin) ist der Aufwand derzeit gerade noch akzeptabel. Aber die Grenze ist erreicht. In 10 Datenbanken überall die gleichen Änderungen vorzunehmen, ist eigentlich jetzt schon nervig. Außerdem ist dabei ja auch immer die volle Konzentration erforderlich, die ich aber gerade nach der 10. Wiederholung nicht mehr unbedingt aufbringe. Es kommt also leider vor, daß ich (kleinere) Fehler begehe und die Datenbankstruktur deshalb nicht bei allen 10 Accounts identisch ist ;-(

      Warum dann nicht mit einem Skript die Datenbanken bzw. die betreffenden Tabellen ändern? Die Zugriffsdaten für sämtliche DBs sollten dir ja vorliegen.

      Ja, mit entsprechenden Scripten wäre es möglich. Gute Idee. Hast Du eventuell eine gute Script-Ressource, wo ich Ideen für für eine effiziente MySql-Server- /Datenbank- /Tabellenverwaltung finde?

      Viele Grüße

      Frank Dell

      1. Eine einfache Variante wäre es, alle Änderungen an einer Datenbank per phpmyadmin vorzunehmen (z.B. an Deiner Entwicklungs-/Testdatenbank) und das von phpmyadmin ausgegebene SQL in eine Textdatei zu kopieren.
        An den Anfang muss noch ein "USE Name der Datenbank;", dann brauchst Du das Skript nur noch pro Datenbank ausführen (oder zwanzig mal untereinander kopieren).
        Wenn Du den mysql-User 'root' verwendest oder einen User mit den entsprechenden Berechtigungen für alle Datenbanken anlegst, musst Du Dir auch keine Sorgen um die Benutzerkennung machen.

        Mit der Zeit wirst Du dann wahrscheinlich auf das phpmyadmin zur Erstellung der Skripte nicht mehr brauchen, andererseits nutze ich es für solche Sachen auch sehr gerne...

        schönen Gruß,
        David

      2. Hallo

        Hallo "Auge";

        In Anführungszeichen, wie die unselige DDR in gewissen Medien. Auch noch nicht gesehen. ;-)

        Warum dann nicht mit einem Skript die Datenbanken bzw. die betreffenden Tabellen ändern? Die Zugriffsdaten für sämtliche DBs sollten dir ja vorliegen.

        Ja, mit entsprechenden Scripten wäre es möglich. Gute Idee. Hast Du eventuell eine gute Script-Ressource, wo ich Ideen für für eine effiziente MySql-Server- /Datenbank- /Tabellenverwaltung finde?

        Es braucht doch nur den oder die Queries mit ALTER ... und eine Schleife, in der pro Durchgang jeweils eine DB bzw. Tabelle eines Kunden angesprochen wird.

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1
  3. Hi,

    Ursprünglich hatte ich die Konzept (je CMS-Account eine eigene Datenbank) gewählt, weil ich mir davon eine eine bessere Performance versprochen habe. Mittlerweile machen mir aber die Nachteile (siehe oben) zu schaffen und ich überlege, die einzelnen Datenbanken in eine einzelne zu überführen (Es sollen ja noch mehr Kunden dazukommen).

    Bei getrennten Datenbanken kann jeder Kunde (vorausgesetzt, die Rechte sind korrekt gesetzt) genau auf seine eigenen Datensätze zugreifen.
    Bei einer einzigen Datenbank für alle Kunden kann jeder Kunde auf alle Datensätze zugreifen.
    (AFAIK unterstützt MySQL Zugriffsrechte für einzelne Tabellen, Spalten und Datenbanken - aber nicht für einzelne Datensätze in einer Tabelle)

    Allein das sollte als Argument gegen eine Sammel-DB ausreichen ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  4. du kannst alles in eine db packen. dazu gehört natürlich auch eine benutzerverwaltung. kann das dein programm?
    derzeit geht dein programm ja nur von einem benutzer aus, und unterscheidet diese durch separate dbs.
    um nur eine einzige db für alle mandanten zu haben, muß dein programm mandantenfähig sein.
    vorteil: nur eine umgebung, daher leichtere administration.
    nachteil: durch größere db langsamer.

    ein dediziertes system für jeden mandanten ist natürlich schneller. dein problem ist aber die weiterentwicklung. allerdings läßt es sich dann nicht verhindern, diese änderungen für jeden mandanten nachzuziehen.