Guten Morgen! Ich habe eine Aufgabenstellung - ich möchte Daten aus einer XML-Datei in eine Datenbank schreiben. Ein Messgerät schickt einmal am Tag seine Messwerte an einen FTP-Server im Netzwerk in Form mehrerer XML-Dateien. Kann das Messgeraet einmal keine Verbindung zum FTP-Server herstellen, dann werden die Messergebnisse in einem Gerätepuffer gespeichert und einfach beim nächsten Mal mitversendet. Zu jedem Zeitstempel gehören ca. 50 Messwerte, von denen ich 8 Stück in die Datenbank schreiben will. Ich habe ein Python-Script geschrieben, dass die XML-Dateien auslesen und an die Datenbank senden kann. Damit das Script zyklisch abläuft, schreibe ich es einfach in die cron-Tabelle auf dem Server. Ich habe aber bisher noch keine Idee, wie ich mit den Altdaten umgehen soll, die bereits eingelesen wurden. Mein Script läuft bis jetzt so, dass alle Dateien im Verzeichnis ermittelt werden und nacheinander geöffnet, eingelesen und dann wieder geschlossen werden. Die XML-Dateien sollen aber nicht gelöscht werden, sondern weiterhin gesichert sein. Ich hätte jetzt einige Ideen 1. Ich erstelle eine log-Datei, in welche die Dateien geschrieben werden, die bisher eingelesen wurden. Dann muss eben verglichen werden, ob die Datei schon bearbeitet wurde oder nicht. 2. Ich speichere (Namen,) Datum und Uhrzeit der letzten Datei und öffne beim erneuten Aufruf des Scripts nur die Dateien, die jüngeren Datums sind 3. Ich verschiebe alle gelesenen Dateien nach Scriptausführung in ein anderes Verzeichnis. Gäbe es noch andere Ideen? Was würdet ihr machen?
Zu 1.: Die Menge der Vergleiche wächst beständig, bis die zu vergleichende Menge den Rahmen des phys. mögl. sprengt. Zu 2.: Manchmal verstellen sich die Uhren wie von Geisterhand und unvorbereitet. Das beschert u.U. eine zusätzliche Stunde zur Winterszeit, die irgendwann später wieder bereinigt wird. (Maschinen sind recht störrisch, wenn es um die Gleichheit von Zahlen geht.) Zu 3.: Auch das schönste Verschieben muss im Rahmen der Transaktion auf der Datenbank stattfinden. Konnten also Datensätze nicht geschrieben werden, darf die Quelle nicht geändert werden. Müsste ich etwas derartiges entwickeln, wären mehr Katzenbilder dabei, ohne jegliche Funktion. Hinge mein Leben davon ab, ist 3. der Favorit. (FTP und Python schließe ich allerdings als Basis für meine Lebensversicherung aus.)
Heinrich Schmidt schrieb: > Ich verschiebe alle gelesenen Dateien nach Scriptausführung in ein > anderes Verzeichnis. Ich würde es so machen, was spräche den dagegen? Du kannst sogar die Dateien dann noch täglich zippen und mit Datum versehen. Heinrich Schmidt schrieb: > Gäbe es noch andere Ideen? Du kannst natürlich "das Original" auch in der DB ablegen.
Läubi .. schrieb: > Du kannst natürlich "das Original" auch in der DB ablegen. Meinst Du damit, dass ich die ganze Datei an die Datenbank sende, also wenn sie z.B. XYZ.XML heisst, die dahinschreiben?
Heinrich Schmidt schrieb: > Meinst Du damit, dass ich die ganze Datei an die Datenbank sende, also > wenn sie z.B. XYZ.XML heisst, die dahinschreiben? Du sollst sie AUCH dort ablegen, z.B. in einer Tabelle der Art: ID | DATEI | XML_CONTENT | CREATED | HASH | OTHER | META | DATA danach kannst du die Datei löschen und du hast genau eine Datenquelle. Du kannst dann in den importierten Daten sogar hinterlegen aus welcher Datei diese orginär stammten.
Läubi .. schrieb: > ID | DATEI | XML_CONTENT | CREATED | HASH | OTHER | META | DATA Was bedeutet denn Hash bzw. was sollte man dort eintragen?
Heinrich Schmidt schrieb: > Was bedeutet denn Hash bzw. was sollte man dort eintragen? http://de.wikipedia.org/wiki/Pr%C3%BCfsumme http://de.wikipedia.org/wiki/SHA-2 Das ist auch alles nur ein Vorschlag, man kann das je nach bedürfnissen und Ambitionen noch beliebig anpassen, da du ja nix weiter zu deinem Anwendungsfall schreibst...
Das ist eigentlich nur eine Frage der zur Verfügung stehenden Resourcen. Auf einem Mikrocontroller mit 128MB Flash muss man da sicher anders vorgehen als mit einer Datenbank auf einem NAS mit 2TB. Letzteres scheibst du mit ASCII-Messwerten in deinem ganzen Leben nicht voll ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.