Datenbank lesen und schreiben getrennt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datenbank lesen und schreiben getrennt

    Hallo Community,

    heute habe ich mal ein größeres Problem, was ich doch denke hier rein passt, da es applikationsseitig und nicht datenbankseitig arbeiten soll.

    Also um was geht es genau?
    Es gibt einen Master-MySQL-Server und einen Slave-MySQL-Server (werden bereits automatisch gesync).
    Nun läuft auf einem Webserver ein individuelles Shopsystem.
    Es soll nun so laufen das alles Query die NUR Daten auslesen die Daten vom SlaveServer bekommen, aber wenn Daten geändert bzw hinzugefügt werden sollen soll er das auf dem MasterServer machen.
    Nun ist mein großes Problem, wie bekommt man soetwas zum laufen ohne jetzt groß Performance fressend zu sein.
    Hätte hier jemand ne Lösung via PHP?
    Im Notfall könnte sowas auch über ein Shell-Skript laufen.

    Ich weiß es gibt auch MySQLPlugins etc. für soetwas aber leider muss es applikationsseitig gelöst werden ohne groß Performance zu schlucken, da es durchaus vorkommen kann das paar tausend User gleichzeitig online sind.

    Die kompletten Server sind gemanaged.

    Ich hoffe mir kann jemand helfen bzw. hat eine Idee wie es gehen könnte.

    Gruß
    Exi
  • Allgemein muss man für ein Master/Slave auch etwas anderes programmieren.
    Das WCF wie es bei easy-coding eingesetzt wird, ist dazu leider nicht zu gebrauchen :(

    So sieht die typische Create Funktion so aus:

    Quellcode

    1. static function create($data) {
    2. $autoincrement = DB::("insert into ...");
    3. return new instance($autoincrement);
    4. }


    da der caching layer fehlt, ist also nicht jedes Script Master/Slave tauglich. Da es unwahrscheinlich ist, dass die Replikation schneller ist, als die Abarbeitung des PHP Scripts an dieser Stelle.

    Die einfachste clientseitige Lösung:
    Baue in deinen DB Wrapper eine Abfrage ein, ob es sich um einen INSERT/UPDATE/DELETE/ALTER query handelt.

    Die einfachtse serverseitige Lösung: Ein MySQL Proxy, der genau das obige macht,
  • Danke für die Antwort :)

    Wie gesagt können wir serverseitig leider nichts machen.

    Das mit dem DB Wrapper hatte ich mir auch schon überlegt aber es gibt schliesslich auch noch verschachtelte Abfragen mit select und update etc in einem.

    Naja mal sehen vllt hat ja noch einer ein Idee.

    Gruß