Forum: PC-Programmierung XML-Daten in Datenbank schreiben


von Heinrich Schmidt (Gast)


Lesenswert?

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?

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

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.)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Heinrich Schmidt (Gast)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Oliver R. (superberti)


Lesenswert?

Hi,

das klingt doch aber ganz nach:

http://oss.oetiker.ch/rrdtool/

Gruß,

von Heinrich Schmidt (Gast)


Lesenswert?

Läubi .. schrieb:
> ID | DATEI | XML_CONTENT | CREATED | HASH | OTHER | META | DATA

Was bedeutet denn Hash bzw. was sollte man dort eintragen?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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...

von Frank (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.