mehrere Datenbanken für ein Projekt

 

Bei kleinerem Webspace gibt es oft nur eine Datenbank, um dort verschiedene Projekte zu trennen wird dann mit Prefixen gearbeitet.

In diesem Fall handelt es sich um ein größeres Projekt, auf einem virtuellem Server. Die logische Unterteilung der einzelnen Bereiche - Stammdaten - Produktdaten - Hilfstabellen war ursprünglich durchaus überschaubar, zwischenzeitlich ist die Anzahl der Tabellen, insbesondere der Hilfstabellen, so hoch, dass ich einen Auslagerung in eine 2. (ggf. auch in eine 3. Datenbank) in Erwägung ziehe.

Was will ich erreichen?

Die 1. Datenbank soll nur noch die Daten enthalten, die nicht neu eingelesen werden können. Das sind z.B. manuelle Eingaben von Passwörtern, Konfigurationen, ...

Die 2. Datenbank enthält die produktiven Daten, also Daten die für die Anzeige speziell (aber automatisch vom Programm) aufbereitet sind.

Die 3. Datenbank enthält "nur" Hilfstabellen, die für die Erstellung der produktiven Daten benötigt werden.

Die 1. Datenbank soll besonders gesichert werden, weil diese Daten nicht so einfach wiederhergestellt werden können.

Die Ansteuerung soll dabei so erfolgen, dass bei einem ggf. weiterem Anwachsen des Projektes die Datenbanken auch auf unterschiedlichen Servern verteilt werden könnten.

Datenbanken auf unterschiedlichen Servern

Ais Performancegründen kann es ggf. sinnvoll sein die Datenbanken zu trennen. Insbesondere die Hilfstabellen, die für die Anzeige der Seiten im Internet nicht mehr benötigt werden, die Datenaufbereitung erfolgt in mehreren CRON-JOBs, könnten gut ausgelagert werden.

Ob eine solche Auslagerung - allein durch die geringere Größe der Datenbank (ohne Hilfstabellen) bereits eine Entlastung für das Frontend bringt, kann ich nicht so ohne weiteres prüfen. Möglich wäre das aber.

Ein "Mehr" an Übersichtlichkeit alleine würde den dazu notwendigen Aufwand allerdings nicht rechtfertigen.

Wenn allerdings eine Trennung Frontend - Backend / CRON-Jobs aus anderen Gründen sinnvoll ist, z,B. CPU, Speicherauslastung, würde diese Variante durchaus interessant sein.

Für den unterschiedlichen Zugriff muss dabei für jede Datenbank ein DB-Connect erzeugt werden, dieser DB-connect wird dann als 2. Parameter bei allen Abfragen übergeben. 

Wenn mit dem gleichen Verfahren verschiedene Datenbanken auf dem gleichen Server ansgesprochen werden sollen, muss der DB-Connect mit dem Paramter TRUE aufgerufen werden.

$con = mysql_connect($server, $user, $pass, TRUE);

Der 4. Parameter TRUE bewirkt, dass php einen neuen Connect aufzubaut und nicht versucht einen bereits bestehende Connect zu verwenden, der mit den gleichen Parametern aufgerufen wurde.
Alternativ dazu gäbe es auch die Möglichkeit auf dem Server mit verschiedenen Usern zu arbeiten.

Aktuell scheint mir aber hier der Aufwand zu hoch. Plan B muss her.

Datenbanken auf dem selben Servern

Bei Verwendung des Datenbanknamens (Schemas) vor den entsprechenden Tabellennamen wäre in diesem Projekt der "Programmieraufwand" überschaubar, weil nur die Tabellennamen in der database.php um genau diese Schema ergänzt werden müssten.

Voraussetzung dafür, dass es funktioniert ist der gleiche DB-Connect, also auch user und passwort müssen übereinstimmen. Lokal ist das alles kein Problem, auf einem einfachem Webspace vermutlich schon.

Auf einem virtuellem Server, mit admin-Rechten auf der Datenbank kann man mit phpMyAdmin (mit dem Superuser oder einem User der das Amin-Recht GRANT besitzt) die Rechte für eine Datenbank zusätzlich an andere User übertragen. 

Diese Lösung bietet, nur ein mehr an Übersichtlichkeit und eine einfachere Datensicherung, aber aktuell ist das wohl noch ausreichend.

 

Quellen

  1. http://www.tutorials.de/php/22391-problem-mehrere-datenbanken-ueber-klasse.html
  2. http://www.php.net/manual/de/function.mysql-select-db.php

 

 

 

 

 

 

 

^