Ich speichere mir Sensorwerte über einen selbst geschriebenes Programm in einer CSV Datei in folgendenem Format: (TIME);(float);(float);(float);(uint8) Der Zeitwert ist ein Unix Timestamp, Die Flaotwerte sind 2+1 stellig und die Uint8 ist 1 Byte groß. Üblicherweiße sieht also ein Datenpaket folgendermaßen aus: 1477128402;11.2;14.5;23.5;i Nun speichere ich das Datenpaket alle 10 Sekunde in die gesagte CSV und möchte sie nun mit einem zweiten Programm graphisch darstellen lassen. Da stellt sich mir die Frage wie ich am besten diese Werte dann vorhalte. Bei zwei Wochen kommen dann ja schon immerhin 120.000 Datensätze zustande. Da ich diese Datensätze nur Zeitbedingt anhand des Timestamp auswerten will, muss ich mir sie ja irgendwo vorhalten. Da nun zu meiner Frage: Wie macht man das am besten? Die Daten allesamt jeweils in Array speichern? Die Daten sequentiell aus der Datei lesen? Oder man sich diese Daten aus der Datei ließt und in eine Temporäre Datenbank schreibt und von dort aus ließt?
Jeder einzelne Wert auf Dauer: https://de.wikipedia.org/wiki/Berkeley_DB Zeitlich gestaffelt zusammengefasst mit Grafikerstellung: https://de.wikipedia.org/wiki/RRDtool
:
Bearbeitet durch User
Rene K. schrieb: > Nun speichere ich das Datenpaket alle 10 Sekunde in die gesagte CSV Jedenfalls würde ich die Timestamp nur einma am Anfang schreiben und dann weglassen. Du kennst ja dann die anderene Zeitpunkt trotzdem. Das spart vermutlich 50% Platz. Gruß Klaus
Klaus schrieb: > Jedenfalls würde ich die Timestamp nur einma am Anfang schreiben und > dann weglassen. Du kennst ja dann die anderene Zeitpunkt trotzdem. > Das spart vermutlich 50% Platz. halt ich für eine schlechte Idee. Was ist wenn die Aufzeichnung nur 9.95 Sekunden dauert? Man sollte zumindest regelmäßig die Zeit Speichen. > Bei zwei Wochen kommen dann ja schon immerhin 120.000 Datensätze > zustande. und wo soll das das Problem sein? Selbst wenn jeder Datensatz 40byte groß ist, dann sind winzige !!4Megabyte!!! selbst wenn du es 10Jahre lang so machst, sind das nicht mal 1GB. Also unter groß versteht man in der aktuellen Zeit etwas anders.
> selbst wenn du es 10Jahre lang so machst, sind das nicht mal 1GB
Kommt darauf an, was die graphische Darstellung alles können soll.
Willst du eine 10-Jahres Übersicht zusammenstellen, während der Benutzer
wartet, sind 1GB verdammt viel. Da braucht es neben dem GB Detaildaten
zusätzlich 100 kB zusammengefasste Daten. RRDtool hat A.K. ja bereits
vorgeschlagen.
Noch einer schrieb: > Willst du eine 10-Jahres Übersicht zusammenstellen, während der Benutzer > wartet, sind 1GB verdammt viel. Da braucht es neben dem GB Detaildaten > zusätzlich 100 kB zusammengefasste Daten. RRDtool hat A.K. ja bereits > vorgeschlagen. RRDtool hat aber den großen Nachteil, das Details in der Vergangenheit verloren gehen (ok das ist kein Nachteil, ist ja so gewollt). Aber das ist teilweise Problematisch weil man nur noch einen Durchschnitt sieht. Das geht heute schon in wenigen Sekunden. Und in 10Jahren sind die Computer so schnell das es "sofort" da ist. Es sollte auch kein Problem sein, eine 2.Datei mit einen Durschnitt je Tag anzulegen. Dann kann man für die Übersicht diese Datei verwenden und für Details die "große" Datei.
eine 1,1GB große Datei mit dem Zeilen "1477128402;11.2;14.5;23.5;i" mit C# zu Parsen und die Summe über das 3. Element dauert 30sekunden. Alles in eine Liste einzulesen dauert 45 Sekunden. Darüber dann die Summe zu bilden dauert dann nur noch 2 Sekunden. Es ist also überhaupt kein Problem, mit solchen Datenmengen zu arbeiten.
Ich wuerds mit einer Datenbank machen (SQLite). Haette den Vorteil (je nach dem was man vorhat), dass man sich sehr leicht Zeitraeume holen kann, ohne die Datei von Hand Parsen und Zeitstempel vergleichen zu muessen usw.
> RRDtool hat aber den großen Nachteil, das Details in der Vergangenheit > verloren gehen RRA für 10 Jahre in Sekundenauflösung ist kein Problem. 100 Jahre in Sekundenauflösung habe ich noch nicht ausprobiert. > dauert 30sekunden ... 45 Sekunden ... 2 Sekunden Hmmm... Habe einen Raspi als Webserver für Datenlogger. Grafik im Browser anzeigen dauert 2 bis 5 Sekunden. Finde ich so gerade noch erträglich. Was für CSV spricht - man kann es einfach in Libreoffice einlesen. Aber bei 1GB wird das so träge - da kann man nicht mit arbeiten. Wenn dir noch nicht klar ist, was du brauchst, nimm eine SQL-Datenbank mit wenig Overhead. Wenn du genau weisst, du willst diese 3 Zahlen loggen und zusammengefasste Auswertungen machen, nimm RRDTools.
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.