Daten speichern Vorgehensweise

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Daten speichern Vorgehensweise

Beitrag von Requion »

Hallo,

derzeit arbeite ich an einem kleinen Projekt welches unter anderem Sensorwerte graphisch darstellen soll. Also zum Beispiel ein Temperatursensor der alle x Sekunden abgefragt wird.
Nun habe ich mir überlegt eine einfache Logfunktion einzubauen um die vom Sensor ermittelten Daten speichern und analysieren zu können.
Das ganze soll auf einem Raspberry Pi laufen, der ja sein Speicher auf einer SD-Karte hat. Ich würde die Daten auch gern auf diese SD-Karte schreiben um nicht noch extra Hardware haben zu müssen.

Meine Frage ist nun, wenn ich alle x Sekunden (z.B. jede Sekunde) mehrer Werte von verschiedenen Sensoren bekomme und diese mitloggen will, wie ich die Speicherung am besten gestalte.
Mir schwebt da die Frage (SD-Karte, SSD) der begrenzten Schreib/Lese-Zyklen im Kopf.
Ist es besser die Daten in eine Art "Chunks" zwischenzuspeichern und dann in größeren Abständen die Chunks zu schreiben und entleeren oder kann man "bedenkenlos" jede Sekunde die Werte schreiben?

Als zusätzlichen Hinweis: Die Daten sind nicht "überlebenswichtig". Ein Verlust von Daten (durch Absturz/Fehler des Programms bevor ein Chunk geschrieben wird) ist zwar nicht schön, aber nicht relevant in einem Maß das es hier berücksichtig werden muss.

Zusatz: Wie sollte es am besten gelöst werden in anbetracht der Performance des Programms?
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Daten speichern Vorgehensweise

Beitrag von charlytango »

bloss meine 3cents, da ich dir keine genaue Lösung anbieten kann.
Aber da du auf Linux unterwegs bist und da wir in einem Projekt eine ähnliche Fragestellung hatten vielleicht nur ein Hinweis in eine Richtung:

Es sieht aus als ob du eine Art logging suchst und dafür hat Linux schon einige Mechanismen parat.
Stichwort: Schreiben in ein Error-Log inklusive Logrotation

Hoffe es gibt dir einen Denkanstoß in Richtung Lösung.

Aber auch ein Logging in eine Datenbank wäre wohl möglich (MySQL ?)

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Daten speichern Vorgehensweise

Beitrag von Requion »

Danke für den Denkanstoß :) @charlytango

Nach meinem Verständnis ist das weniger vom OS abhängig. Ich möchte ja vom Programm ermittelte Werte wegspeichern. Die sollten möglichst nicht im ErrorLog vom Linux auftauchen :D.
Im Prinzip könnte ich nach einer Logger Bibliothek schauen. Allerdings geht es dabei ja eigentlich "nur" darum einen Wert in eine Datei zu speichern. Da jetzt noch eine (große) extra Lib einbauen scheint mir zu übertrieben.

Ich hatte auch schon an eine DB gedacht. Ich würde wahrscheinlich SQLite nehmen. Ich werde mir das auch definitv mal anschauen.
Wobei auch im Falle einer DB-Anbindung die Frage wäre ob ich jeden Wert einzeln wegschreibe oder erstmal Sammel und dann "Paketweise" schreibe.
Ich kenn mich noch nicht so gut aus was DB Performance angeht.

Nochmal zum Verständnis: Es geht nicht um kritische Werte oder Informationen über Fehler oder Exceptions.
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Daten speichern Vorgehensweise

Beitrag von af0815 »

Requion hat geschrieben:Meine Frage ist nun, wenn ich alle x Sekunden (z.B. jede Sekunde) mehrer Werte von verschiedenen Sensoren bekomme und diese mitloggen will, wie ich die Speicherung am besten gestalte.
Mir schwebt da die Frage (SD-Karte, SSD) der begrenzten Schreib/Lese-Zyklen im Kopf.
Ist es besser die Daten in eine Art "Chunks" zwischenzuspeichern und dann in größeren Abständen die Chunks zu schreiben und entleeren oder kann man "bedenkenlos" jede Sekunde die Werte schreiben?


In meiner letzten Firma haben wir Probleme mit diesem 'jede Skunde' auf Speicherkarten schreiben bekommen. Dort lief lange Zeit unbemerkt ein sekündliches Logging in einem Embedded Linux mit und wir wussten nicht warum nach einigen Monaten die Speicherkarten Fehler bekamen. In Chunks speichern, wenn möglich, ist keine so schlechte Idee.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Daten speichern Vorgehensweise

Beitrag von Requion »

af0815 hat geschrieben:
Requion hat geschrieben:Meine Frage ist nun, wenn ich alle x Sekunden (z.B. jede Sekunde) mehrer Werte von verschiedenen Sensoren bekomme und diese mitloggen will, wie ich die Speicherung am besten gestalte.
Mir schwebt da die Frage (SD-Karte, SSD) der begrenzten Schreib/Lese-Zyklen im Kopf.
Ist es besser die Daten in eine Art "Chunks" zwischenzuspeichern und dann in größeren Abständen die Chunks zu schreiben und entleeren oder kann man "bedenkenlos" jede Sekunde die Werte schreiben?


In meiner letzten Firma haben wir Probleme mit diesem 'jede Skunde' auf Speicherkarten schreiben bekommen. Dort lief lange Zeit unbemerkt ein sekündliches Logging in einem Embedded Linux mit und wir wussten nicht warum nach einigen Monaten die Speicherkarten Fehler bekamen. In Chunks speichern, wenn möglich, ist keine so schlechte Idee.

Danke für die Antwort. Ich hab auch die Befürchtung das die SD-Karte vom Pi da nicht lange mitmachen würde wenn ich sekündlich Daten schreibe. Eine alternative wäre eine Festplatte. Da sich das ganze aber im normalfall in Bewegung befindet ist das mit normalen Festplatten auch keine Option. Und bei SSDs ist wieder die Sache mit den Schreib/Lese-Zyklen. Und das ganze übers Internet zu lösen ist keine Lösung, da keine dauerhafte Internetverbindung vorhanden/geplant ist.

Ich werde es dann also in Chunks/Paketen zwischenspeichern und dann nach einer bestimmten Zeit oder einer bestimmten Datenmenge wegschreiben.
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Daten speichern Vorgehensweise

Beitrag von af0815 »

Eine SSD hat damit weniger Probleme. Dadurch das das BS der SSD die Daten zwischenbuffert und auch die Bereiche gleichmässig beschreibt und Korrekturmaßnahmen hat, ist hier die Wahrscheinlichkeit geringer, das es zu Problemen kommt. Ausserdem kann man die SSD auch über ihren Status befragen (smartmontools). Da gibt es Hinweise wenn die dem Ende zu geht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten