- Beiträge: 68
Datensynchronisierung beschleunigen
- Andreas Schauerte
- Autor
- Offline
- Benutzer
Weniger
Mehr
10 Jahre 8 Monate her - 10 Jahre 8 Monate her #1620
von Andreas Schauerte
Datensynchronisierung beschleunigen wurde erstellt von Andreas Schauerte
Hallo,
zwischen unserer Warenwirtschaft (DB++ -> ODBC) und einer eigenentwickelten Software (MySQL 5.6) sollen möglichst schnell und mit möglichst geringer Datenbankbelastung mehrmals am Tag Daten abgeglichen werden. (Immer von ODBC -> MySQL)
Bislang verfahre ich z.B. für Adressen wie folgt:
1.) Daten via ODBC in MySQL Tabelle "anschrift_tmp" kopieren. (Vor Import leeren)
2.) Tabelle "anschriften" leeren (MySQL Heater "TRUNCATE TABLE anschrift")
3.) Mittels MySQL Heater "INSERT INTO anschrift SELECT * FROM anschrift_tmp"
Daten von anschrift_tmp in MySQL Tabelle anschrift kopieren
4.) Tabelle anschrift_tmp mittels MySQL Heater leeren ("TRUNCATE TABLE anschrift_tmp")
5.) Danach ein "OPTIMIZE TABLE anschrift"
Dies war nur eine Beispieltabelle. Es werden auf dieselbe Art und weise für mehrere Tabellen Daten kopiert. Teils mit mehreren 10.000 oder 100.000 Datensätzen.
Viele Datensätze bleiben seit dem letzten Abgleich natürlich unverändert, werden jedoch trotzdem jedes Mal gelesen und in die Datenbank geschrieben.
Das ganze funktioniert, allerdings suche ich Optimierungsmöglichkeiten da die Geschwindigkeit zu langsam und Datenbelastung meiner Meinung nach zu hoch sind. Außerdem befürchte ich die Vorteile von MySQL (query-cache usw) durch das leeren der Tabellen nicht ausnutzen zu können.
Haben Sie Anregungen und Tipps für mich, wie ich das ganze optimieren könnte?
Vielen Dank schon vorab!
zwischen unserer Warenwirtschaft (DB++ -> ODBC) und einer eigenentwickelten Software (MySQL 5.6) sollen möglichst schnell und mit möglichst geringer Datenbankbelastung mehrmals am Tag Daten abgeglichen werden. (Immer von ODBC -> MySQL)
Bislang verfahre ich z.B. für Adressen wie folgt:
1.) Daten via ODBC in MySQL Tabelle "anschrift_tmp" kopieren. (Vor Import leeren)
2.) Tabelle "anschriften" leeren (MySQL Heater "TRUNCATE TABLE anschrift")
3.) Mittels MySQL Heater "INSERT INTO anschrift SELECT * FROM anschrift_tmp"
Daten von anschrift_tmp in MySQL Tabelle anschrift kopieren
4.) Tabelle anschrift_tmp mittels MySQL Heater leeren ("TRUNCATE TABLE anschrift_tmp")
5.) Danach ein "OPTIMIZE TABLE anschrift"
Dies war nur eine Beispieltabelle. Es werden auf dieselbe Art und weise für mehrere Tabellen Daten kopiert. Teils mit mehreren 10.000 oder 100.000 Datensätzen.
Viele Datensätze bleiben seit dem letzten Abgleich natürlich unverändert, werden jedoch trotzdem jedes Mal gelesen und in die Datenbank geschrieben.
Das ganze funktioniert, allerdings suche ich Optimierungsmöglichkeiten da die Geschwindigkeit zu langsam und Datenbelastung meiner Meinung nach zu hoch sind. Außerdem befürchte ich die Vorteile von MySQL (query-cache usw) durch das leeren der Tabellen nicht ausnutzen zu können.
Haben Sie Anregungen und Tipps für mich, wie ich das ganze optimieren könnte?
Vielen Dank schon vorab!
Letzte Änderung: 10 Jahre 8 Monate her von Andreas Schauerte.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
10 Jahre 8 Monate her #1624
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Datensynchronisierung beschleunigen
Hallo Herr Schauerte,
um den Aufwand für eine Datensynchronisation möglichst gering zu halten benötigen Sie ein zusätzliches Feld (TIMESTAMP) in der Ursprungstabelle, sowie müsste entweder die Applikation dieses Feld bei jeder Änderung oder Neuanlage selbst aktualisieren oder aber sie lassen das über einen Datenbanktrigger von der Datenbank automatisch setzen. Evtl. existiert in der Tabelle ein solches Feld für letzte Aktualisierung bereits?
So könnten Sie z.B. eine dynamische Abfrage implementieren die jeweils nur seit der letzten Datensynchronisation die benötigten Daten selektiert und in die MySQL Tabelle überführt.
Wenn das ein gangbarer Weg für Sie erstelle ich Ihnen gerne ein kleines Skript, das den SELECT dynamisch aufbaut und nach der Synchronisation den zuletzt verwendeten TIMESTAMP für die nächste Ausführung speichert.
um den Aufwand für eine Datensynchronisation möglichst gering zu halten benötigen Sie ein zusätzliches Feld (TIMESTAMP) in der Ursprungstabelle, sowie müsste entweder die Applikation dieses Feld bei jeder Änderung oder Neuanlage selbst aktualisieren oder aber sie lassen das über einen Datenbanktrigger von der Datenbank automatisch setzen. Evtl. existiert in der Tabelle ein solches Feld für letzte Aktualisierung bereits?
So könnten Sie z.B. eine dynamische Abfrage implementieren die jeweils nur seit der letzten Datensynchronisation die benötigten Daten selektiert und in die MySQL Tabelle überführt.
Wenn das ein gangbarer Weg für Sie erstelle ich Ihnen gerne ein kleines Skript, das den SELECT dynamisch aufbaut und nach der Synchronisation den zuletzt verwendeten TIMESTAMP für die nächste Ausführung speichert.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andreas Schauerte
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 68
10 Jahre 8 Monate her #1625
von Andreas Schauerte
Andreas Schauerte antwortete auf Datensynchronisierung beschleunigen
Hallo Herr Stark,
danke für den Tipp! Hört sich vielversprechend an! Ich prüfe das ganze und würde ggf. nochmal auf Sie zukommen.
Gruß A. Schauerte
danke für den Tipp! Hört sich vielversprechend an! Ich prüfe das ganze und würde ggf. nochmal auf Sie zukommen.
Gruß A. Schauerte
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andreas Schauerte
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 68
10 Jahre 8 Monate her #1626
von Andreas Schauerte
Andreas Schauerte antwortete auf Datensynchronisierung beschleunigen
Guten morgen Herr Stark,
ich habe in Erfahrung bringen können, dass die Datenbank für einige Tabellen Änderungen je Datensatz abspeichert. Z.B. in der Spalte anschrift_aenderung. Hier wird das Datum der Änderung im Format 20140214 gespeichert.
Wären Sie mir bei einem Skript behilflich? Vielen Dank!
ich habe in Erfahrung bringen können, dass die Datenbank für einige Tabellen Änderungen je Datensatz abspeichert. Z.B. in der Spalte anschrift_aenderung. Hier wird das Datum der Änderung im Format 20140214 gespeichert.
Wären Sie mir bei einem Skript behilflich? Vielen Dank!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
10 Jahre 8 Monate her #1627
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Datensynchronisierung beschleunigen
Hallo Herr Schauerte,
im Anhang finden Sie das Beispiel inkl. einer Access Datenbank . Hier werden 2 .NET Script Heater verwendet um einmal vor dem Start das letzte aktualisierte Datum aus einer Datei „lastchange.txt“ zu lesen. Ist die Datei vorhanden wird daraus das Datum gelesen und es wird der FlowHeater Paramater „$LAST$“ gesetzt. Dieser Parameter wird auf der READ Seite verwendet um die zu synchronisierte Datenmenge einzugrenzen. Hinweis: Bei diesem .NET Script Heater muss „Ausführung bei“ auf „Start“ gestellt werden!
Der zweite .NET Script Heater aktualisiert die Datei „lastchange.txt“ währen der Datensynchronisation mit dem größten Datum das verarbeitet wurde. Dies wird für den nächsten Lauf der Datensynchronisation benötigt. Hinweis: Bei diesem .NET Script Heater muss „Ausführung bei“ auf „Pro Zeile/Satz“ gestellt werden!
Das Beispiel verwendet für LastChange ein Textfeld, dies wurde verwendet da Sie oben geschrieben haben das Format wäre 20140202. Bitte prüfen Sie das, evtl. muss das noch auf den Datentyp DATETIME umgestellt werden.
Da das Feld lt. Ihren Angaben keine Uhrzeit Informationen enthält wird in dem Beispiel immer das komplette letzte Datum mit selektiert, es wird immer der komplette letzte Tag Synchronisiert!
im Anhang finden Sie das Beispiel inkl. einer Access Datenbank . Hier werden 2 .NET Script Heater verwendet um einmal vor dem Start das letzte aktualisierte Datum aus einer Datei „lastchange.txt“ zu lesen. Ist die Datei vorhanden wird daraus das Datum gelesen und es wird der FlowHeater Paramater „$LAST$“ gesetzt. Dieser Parameter wird auf der READ Seite verwendet um die zu synchronisierte Datenmenge einzugrenzen. Hinweis: Bei diesem .NET Script Heater muss „Ausführung bei“ auf „Start“ gestellt werden!
Der zweite .NET Script Heater aktualisiert die Datei „lastchange.txt“ währen der Datensynchronisation mit dem größten Datum das verarbeitet wurde. Dies wird für den nächsten Lauf der Datensynchronisation benötigt. Hinweis: Bei diesem .NET Script Heater muss „Ausführung bei“ auf „Pro Zeile/Satz“ gestellt werden!
Das Beispiel verwendet für LastChange ein Textfeld, dies wurde verwendet da Sie oben geschrieben haben das Format wäre 20140202. Bitte prüfen Sie das, evtl. muss das noch auf den Datentyp DATETIME umgestellt werden.
Da das Feld lt. Ihren Angaben keine Uhrzeit Informationen enthält wird in dem Beispiel immer das komplette letzte Datum mit selektiert, es wird immer der komplette letzte Tag Synchronisiert!
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andreas Schauerte
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 68
10 Jahre 8 Monate her #1630
von Andreas Schauerte
Andreas Schauerte antwortete auf Datensynchronisierung beschleunigen
Vielen, vielen Dank! Das Skript ist wirklich Gold wert!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.288 Sekunden