Mailinglisten-Archive |
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