phpbar.de logo

Mailinglisten-Archive

Abfrage mehrere Datenbankserver

Abfrage mehrere Datenbankserver

Michael Donning donning at informenta.de
Die Mai 6 14:47:37 CEST 2003


Hallo Thomas,

> -----Original Message-----
> From: Technik via echtwahr.com (NT7) [mailto:technik at echtwahr.com]

> Bei unseren Server ist nur leider das Problem,
> das Sie alle in anderen Standorten liegen, und
> daher für uns die Traffic sehr wichtig ist!
>
> Also die frage ist, gewinn an Geschwindigkeit gegen  Kosten aufzurechnen
>
> Ich hatte jetzt gelesen, das bei vielen Änderungen an der Datenbank
> die Replikation nicht der große Vorteil ist, was kann man denn sonst
> noch machen, außer vielleicht Cluster (keine Ahnung davon)
>
> Ich habe in unserem System 3 Unterschiedliche Datenbanken,
> davon würde ich aber nur 2 bei der Replikation benutzen.

Ich verwende z.T. die von vorher in diesem Thread von mir beschriebene
Lösung mit den "Schatten"-DBs. Der Vorteil ist, daß in den entstehenden
Scripts nur "atomare" Befehle ausgeführt werden. Im Gegensatz zur
Replikation, wo auch aufwendige Queries an die Ziel-Server übertragen
werden.

Da ich die Quelltabellen z.T. mit Queries (INSERT INTO ... SELECT FROM ...)
komplett neu aufsetze, würde der Befehl so dann auch auf den Ziel-Server
übertragen werden. Wenn dann das ein Web-Server ist, dann können die User
erstmal ein ausgiebiges Kaffekränzchen abhalten. Außerdem schlagen
DB-übergreifende Statements natürlich fehl, wenn eine der referenzierten
DB's nicht auf dem Ziel-Server vorhanden ist.

Die Methode mit dem Schatten-DBs belastet den Quell-Server natürlich
gehörig, außerdem wird durch die Laufzeit (bei größeren DB) das minimale
Replikationsintervall beschränkt. Dafür erhält man als Ergebnis schön
(ver-)packbare SQL-Scripts, die dem Ziel-Server bei größeren Änderungen auch
in "appetitlichen Häppchen" serviert werden können, so daß dieser auch
seinen regulären Tätigkeiten noch nachgehen kann.

Ein weiterer Nachteil ist natürlich, daß man sich für diese Methode
ersteinmal ein (bzw. mehrere) Script(s) basteln muß bzw Fremdsoftware
finden+zukaufen muß.

Hier mal ein Ausschnitt aus meinem Script, damit man mal eine grobe
Vorstellung bekommt (ist kein GPL, daher kein komplettpost):

#get deleted records
#----------------------------------------
$sql="SELECT ".build_prefixed("d.", at primcols).
     " FROM $dest_db.$tabname d".
     " LEFT OUTER JOIN $source_db.$tabname s ON
".build_join_prefixed("d.","s.", at primcols).
     " WHERE s.$primcols[0] is NULL";
$dsth=$dbh->prepare($sql);
if (defined $dsth) {
    $rc=$dsth->execute();
    log_line("$tabname: $rc deleted records");
    while (@drow = $dsth->fetchrow()) {
        printtosql( "DELETE FROM $tabname WHERE ".
              build_where_val($dbh,"",\@primcols,\@pkisstr,\@drow).";\n" );
    }
    $dsth->finish;
} else {
    log_line("skipping $tabname delete, error on sql: $sql ");
}
#----------------------------------------

Grüße,
Michael Donning

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive