Überwachung von Datensatzänderungen

Romanticus

Grünschnabel
Hallo,

ich habe folgende Situation:

eine produktive Datenbank und eine Datenbank, die als Datewarehouse (DW) dient. Beides sind MySql 5.x DBs mit der MyISAM-Engine. Die Daten werden einmal pro woche aus der produktiven Datenbank ins DW exportiert. Es gibt aber Tabellen, die relativ groß sind (> 500.000 Zeilen), bei denen sich aber relativ selten was ändert. Da die Änderungen aber sehr wichtig sind, müssen sie auf jeden Fall schnellstmöglich im DW auftauchen. Folgende Möglichkeiten sehe ich zur Lösung:
1. Die Tabelle wird jedes Mal komplett neu ins DW übertragen. Nachteil - es kann passieren, dass wegen 100 geänderten Datensätzen mehr als 500.000 übertragen werden, was sehr teuer ist.
2. Ich lege in der operativen Datenbank eine zusätzliche Tabelle (update_log), die die Änderungen protokollieren soll. Die Tabelle, die auf Änderungen überwacht werden soll, bekommt einen ONINSERT- und einen ONUPDATE-Trigger, die den Wert updated in der Tabelle update_log für den betroffenen Datensatz auf 1 setzt. Nachdem die Daten ins DW übertragen wurden, rufe ich eine Prozedur, die alle updated-Werte wieder zurücksetzt.
Nachteil dieser Methode ist, dass ich mehr Daten in der operativen Datenbank habe. Zweitens besteht die Gefahr, dass Inkonsistenzen entstehen, da der Extraktions-Prozess zu lange dauert um die betroffenen Tabellen für diese Zeit zu locken.
Was denkt Ihr, wie man dieses Problem am elegantesten lösen könnte?

Gruß,
Romanticus
 
Hallo,

ich würde 1. Lösung empfehlen und einen Zeitpunkt wählen wo kein Betrieb auf dem operativen System ist. Und 500k Zeilen muss auch noch nicht zwangsläufig teuer sein.

Es hängt auch davon ab wie breit die Tabelle ist.

Ich habe bisher die Erfahrung gemacht, dass wenn man operative und dispositive System zusehr mit einander vermischt, also sprich das "automatisch" ausm operativen System Daten ans DWH (DataWarehouse) geschickt werden können die Wartungskosten extrem in die höhe gehen. Das mag vielleicht nicht auf alle Anwendungsbereiche übertragbar sein da ja nicht alle Unternehmen vergleichbar sind.

Rechnest Du noch eine Historie mit den Daten? Lädst Du nur eine Tabelle?
 
es werden mehrere Tabellen übertragen, einige davon sind mehrere Gb groß, wobei etwa 90% davon ab einem gewissen Zeitpunkt nicht mehr geändert wird. Einige Tabellen werden historisiert, wobei die zum jetzigen Zeitpunkt noch nicht sehr groß sind.
 
Hallo,

also ich extrahiere auch bei einem Kunden ca. 300 Tabellen (insgesamt 4-5 GB) das dauert ca. 45min. Da in der Nacht ehh niemand arbeitet und diverse Backups gemacht werden bietet es sich an in der Nacht die Daten zu laden. Die Daten werden auch nur einmal tgl. frisch gebraucht. In den meisten DWH Projekten die ich begleitet habe war auch nie eine höhere Akutalität gefordert.

Weiterhin sollte man beim Extraktionprozess darauf achten, dass sich Quelltabellen ja auch mal in Ihrer Struktur ändern können etc. Der Anwender nennt das Releasewechsel.

Also viele viele Stolpersteine

Frohes Fest schonmal an dieser STelle
 
Zurück