phpbar.de logo

Mailinglisten-Archive

LAYOUT Re: Newbie: Replikation etwas anders/komplizierter...

LAYOUT Re: Newbie: Replikation etwas anders/komplizierter...

Andreas Müller mysql at universalware.de
Fre Okt 26 10:45:15 CEST 2007


Hallo Tobias,

rein aus dem Bauch heraus würde ich hier folgendes vorschlagen:

Wie es scheint gibt es einen Input-Bereich und einen Lager-Bereich. Im Input
Bereich fallen Daten an nach einem Aufräumen in den Lager-Bereich überführt
werden müssen.
Also würde ich den Input Bereich so gestalten das er in möglichst für das
Aufräume greifbare Blöcke zerlegt wird und die Aufräumarbeiten in dem Input
Bereich noch überschaubar bleiben. z.B.

- pro Tag eine Tabelle
- am Ende es Tages die Tabelle aufräumen und Daten in Lager-Tabelle
schreiben
- nicht verarbeitete Daten (weil noch nicht aufräumbar) verschiebe ich in
die aktuelle Tagestabelle
- usw.

Damit halte ich den Input Bereich klein, was ich aufräumen kann Räum ich
auf, was nicht verarbeitbar ist verschiebe ich auf den nächsten Zyklus.
"Tag" kann man nun auch als 2 Tage, Woche, Monat o.ä. auffassen.

Das Aufräumen, Übertragen in Lagertabelle und Säubern des Input Bereiches
muss dabei aber in einer Transaktion ablaufen - sprich MyISAM als Storage
Engine fällt da aus. Daher würde ich hier (vor allem bei den Datenmengen)
auf InnoDB setzen. Eine schönen fetten Datenbankserver nehmen (ordentlich
CPU, viel RAM und vor allem sehr schnelle Platten) und dem InnoDB ordentlich
Platz (auto extend bremst extrem also lieber gleich auf Partition schrieben
lassen oder ordentlich große Tablespace Dateien anlegen) und RAM geben.
Evtl. reicht es wenn man den Input Bereich auf InnoDB fährt und die
Lager-Tabellen auf MyISAM aber das müsste man in der Praxis sehen wie sich
auch Abfragen gestalten denn: Fahre ich zwei vollausgebaute Storage-Engines
in MySQL brauch ich für bei jeweils viel RAM denn die Buffer, Caches etc.
gehören der jeweiligen Storage Engine.

Noch kurz zum Aufräumen: Das Aufräumen nach der Methode von Sebastian ist
wesentlich schneller als der Subselect - da hat sich zwar in den 5er
Versionen viel am optimizer getan aber so richtig herausoptimieren von
solchen Abfragen klappt noch nicht ganz. Bei meinem Vorschlag würde das
ganze sogar nochmals vereinfach weil man hier direkt auf einen Inner-Join
setzen kann:

INSERT INTO lager_tabelle(felder....)
SELECT felder....
FROM Tabelle1
INNER JOIN Tabelle2 ON Tabelle2.ID=Tabelle1.ID
INNER JOIN Tabelle3 ON Tabelle3.ID=Tabelle2.ID

Schneller geht das dann nun wirklich nicht :-)

Gruß,
Andreas

_______________________________________________
Allgemeine Infos zur Liste: http://www.4t2.com/mysql/
Verwaltung: https://lists.4t2.com/cgi-bin/mailman/listinfo/mysql-de

php::bar PHP Wiki   -   Listenarchive