Sollte man Konstanten setzen oder nicht?

Das ganze ist viel Übersichtlicher wenn man für jede Datenbank ein eigene Instance hat...
Somit ist es auch unwarscheinlicher das man an der falschen Datenbank sql befehle ausführt...
 
Dann bau die Klasse um - wo ist das Problem :)

PHP:
class mysqldb{
  private $dbs = array( 1 => "db1", 2 => "db2", 3 => "db3" );
  private $link;

 public function __construct( $dbNummer, $user = "user", $host = "localhost", $pass = "pass"){
     $this->link = mysql_connect($host , $user, $pass, $this->dbs[$dbNummer]);
  }

  private function select_db($db_nr){
     $this->select = mysql_select_db($this->dbname); 
  }
  puplic function close(){
    if(is_resource($this->link)){
       mysql_close($this->link);
    }
  }
}

Natürlich fehlt hier noch die Überprüfung ob auch wirklich eine Nummer übergeben würde bzw. ob die DB überhaupt exisitiert. Ebenso die Fehlerbehandlungen. Aber das hat nichts mehr mit dem Thema AW: Sollte man Konstanten setzen oder nicht? zu tun.

Schau Dir mal meinen Link von weiter oben an ...
 
@Rookie: Aber Du hast zwei Verbindungen des Datenbank Servers belegt. Macht auf sehr kleinen Seiten kein Problem darstellen, allerdings bei vielen Usern hast Du immer doppelt soviele Connections zum Server offen ...

Schlaf schön ;)
 
Ich möchte aber in der Classe die Daten wie Datenbankname, Username, Passwort etc. stehen haben..

Sinn und Zweck ist es doch sich arbeit zu ersparen, etwas einmal zu programmieren und öfters zu verwenden....

Daher werden die Connection Daten dem constructor übergeben und nicht in die klasse direkt eingebunden...

Wenn du nun also eine Verbindung zur datenbank aufbauen willst, müßtest du jedesmal ein array übergeben welches alle datenbanken config werte beinhaltet und eine Varibale, welche klärt welcher Datensatz zum verbindungaufbauen verwendet werden soll.
Dies muß natürlich auch dann geschehen, wenn du gar nicht die absicht hast zu mehr als einer Datenbank eine verbindung aufzubauen zu können...
 
Du hast 2 Verbindungen zu Unterschiedlichen Datenbanken....
Also die Anzahl der Verbindungen ist grundsätzlich die gleiche egal ob 1 oder 2 objekte angelegt worden sind....

Bei einer Datenbank würde ich das object entweder via Singleton pattern erstellen oder nach dem Registry muster abspeichern...
Somit wird nur eine Verbindung hergestellt und man kann von überall auf das object zugreifen...

Hab dein Beispiel gerade erst gesehen...
Ok dort hast du 1 Server mit X Datenbanken....
Ich bin jetzt von Unterschiedlichen Servern ausgegangen.
Aber es macht aus meiner sicht keinen Sinn für eine Webseite getrennte Datenbanken auf einem server zu verwenden...
 
Zuletzt bearbeitet:
Doch, ich stehe gerade vor solch einem Problem. Sicherlich ist dies nicht gerade der alltägliche Fall, aber ich habe massenhaft Daten in der Datenbank. Also ich spreche hier von hunderten Tabellen - eine DB hat im Moment etwas über 400 Tabellen, über 700 Millionen Einträge und um die 40 GB Speicher belegt.

Das System wächst aber weiter und genau hier möchte ich mit einem "Clustering für Arme" ansetzen - für richtiges Clustering bzw. LoadBalancing fehlt mir im Moment noch das nötige Tiefenwissen. Aber ich möchte hier erstmal eine META_DB aufsetzen in denen die Projekte beschrieben werden, User verwaltet etc. Die eigentlichen Massendaten lagere ich in DATA_DBs aus. Erreicht diese eine kritische Menge (bei MySQL las ich mal was von 1000 Tabellen), mache ich eine neue DATA_DB auf und neue Projekte verweisen auf diese. So kann ich zumindest "schnell" komplette Datenbank-Bereiche auf einen neuen Server auslagern, wenn die Last zu groß wird.

Also im Prinzip habe ich für diese Applikation mindestens 2 DBs.
 
Nimm es mir nicht übel, aber Du solltest Dich wirklich tiefer in die Thematik einlesen. Ich kann Dir abschließend nur nochmals nahelegen, PHP Literatur zu besorgen (am besten PHP5) und Dich nochmals mit "Objektorientierter Programmierung" zu beschäftigen.
 
Ein Tipp zu deinem Datenvolumen...
Du hast dann solangsam ein Volmen erreicht wo man mal drüber nachdenken sollte womöglich auf Oracle DB umzusteigen....
Innerhalb meiner Beruflichen Ausbildung wurde eine Oracle 9 verwendet mit einem Datenvolumen von 16Terrabyte und über 4000 Tabellen.
Hierzu muß ich jedoch sagen, daß der Server mit 64 CPU´s und X Festplatten ausgestattet war....
 
Eben, diese zusätzlichen Kosten können wir im Moment nicht tragen. Wenn dann würde wohl eher SQL Server mit Reporting Services & Analyser in Frage kommen.

Im Moment habe ich noch keine Probleme mit diesen Datenbanken - trotz der Größe bekommt das MySQL relativ gut gebacken. Problematisch sind hier eher längere Laufzeiten beim regelmäßigen mysqlcheck, Backup der Files, unübersichtliche Tabellenlisten etc. Ich würde hier dann eher den Weg gehen weitere Server hochzuziehen. Sollte das Portal noch weiter wachsen, wäre dann die Zeit reif für Clustering und Load Balancing.

Ich möchte eben, solange es geht, rein auf Open Source setzen.
 
Zurück