Hallo,
Problem: Datensicherung dauert zu lange, 55 sec für zehn Sätze aus ca. 30.000. Es geht um die Verbesserung des Konzepts.
Für ein Projekt habe ich einen Hauptserver im Web (mehrere Mandanten in der DB) und einen Ersatzserver im lokalen Netz. Da der Ersatzserver aus dem Web nicht erreichbar ist, müssen die Daten bei Bedarf vom Hauptserver "gezogen" werden, also manuell gesteuert.
Das Projekt ist mandantenfähig. Das heisst, die Daten eines bestimmten Mandanten werden vom Haupt- zum Ersatzserver übertragen, nicht die Daten anderer Mandanten.
Das Sicherungs-Programm läuft auf dem Ersatzserver und stellt die eigenen DB-Tabellen und die des Hauptservers gegenüber. Gezeigt wird jeweils der Tabellenname, die Anzahl der Datensätze dieses Mandanten und das größte last_modified (Datum/Uhrzeit) zu Mandant/Tabelle.
Bei Klick auf einen Tabellennamen wird vom Hauptserver eine CSV-Datei angefordert, als Parameter das größte Datum (nicht Uhrzeit) last_modified zu Mandant/Tabelle mitgegeben.
HAUPTSERVER:
Sämtliche 30.000 Datensätze zu Mandant/Tabelle werden gelesen, aufsteigend nach ID.
Ist last_modified kleiner als der Parameter, ist nichts zu ändern. Aber die ID wird übermittelt und besagt: Satz besteht.
Ist last_modified größer oder gleich dem Parameter werden die Feldinhalte übermittelt.
ERSATZSERVER:
Dummerweise müssen alle 30.000 IDs in der Tabelle gelesen werden und einzeln mit den hereingekommenen IDs verglichen werden.
Wenn "eigene" ID fehlt, wird der Satz neu angelegt.
Wenn "eigene" ID vorhanden, wird der Satz geändert,
Wenn "eigene" ID, aber ohne "Partner" vom Hauptserver, wird Satz gelöscht.
Für eine "handvoll" zu ändernder oder zu löschender Datensätze müssen auf dem Hauptserver UND nochmal auf dem Ersatzserver 30.000 Datensätze einzeln durchgehechelt werden.
Bei Neuauflage so eines Projekts würde ich gelöschte Datensätze mit einer Lösch-Kennung versehen, aber stehen lassen. Dann können sie gezielt übermittelt werden.
Irgend eine Idee zur Verschnellerung des Sende- und Empfangsprogramms?
Gruß Linuchs