Forum: PC-Programmierung Prinzipfrage: kontinuierlichen Datenstrom speichern


von Micha (Gast)


Lesenswert?

Hallo,
ich habe mal eine Prinzipfrage da ich nicht weiß, wie ich ich mein 
Problem am besten lösen kann.

Ich habe mit C# eine Prüfsoftware geschrieben die mir über 4...5h hinweg 
jede Sekunde ein paar Messwert liefert.
Diese Messwerte möchte ich nun in eine csv schreiben was auch klappt.

Momentan warte ich in der Software bis ich einen Messwert bekomme und 
schreibe in sofort in die Datei.

Wenn ich nun aber 5x in der Sekunde, über Stunden hinweg, ständig die 
Datei schreibe/erweitere, habe ich ja eine Unmenge an Schreibzyklen. 
Macht das dem Speichermedium etwas aus? (derzeit hdd, später vlt. mal 
flash)

Also habe ich überlegt ob ich nicht die Messwerte in einen Buffer 
schreiben soll und dann immer z.b. 100 Messwerte auf einmal zu schreiben 
- das wiederum benötigt ja aber mehr RAM (wobei 1000 Messwerte a 4 Byte 
ja in heutigen Zeiten ein "Witz" sind!)

Wie machen das nun die Profis!? wirklich jeden Messwert einzeln 
schreiben oder aber in einem arry zwischenpuffern - und warum ist die 
eine Lösung besser als die andere?

hoffe Ihr könnt mir weiter helfen!

Grüße Micha

von Archie F. (archie)


Lesenswert?

Du beantwortest doch deine Frage schon von sich aus. Wenn du zukünftig 
einen Flash-Speicher verwenden solltest, wäre Page-Write Prinzip am 
sinnvollsten.

>habe ich ja eine Unmenge an Schreibzyklen.
>Macht das dem Speichermedium etwas aus? (derzeit hdd, später vlt. mal flash
Zu HDD kann ich nciht viel sagen, aber dem Flash macht es schon was aus. 
Die Schreibzyklen sind begrenzt (wenn du auf die gleiche Adresse immer 
wieder schreibst). Soll der Speicher ~unendlich Mal überschreibbar sein, 
eignet sich da eher ein FRAM. Kannst aber das Datenblatt vom Flash 
angucken und ausrechnen ob dein Prüfgerät beim vollen Einsatz die 
Garantiezeit überlebt :), denn Flash's sind um einiges billiger als die 
FRAM's.

von sebihepp (Gast)


Lesenswert?

Das Betriebssystem selbst hat die Aufgabe, diese Zugriffe bestmöglichst 
umzusetzen. Windows und Linux legen selber einen Puffer dafür an. 
Deshalb gibt es ja die "Flush"-Funktionen.

von Karl H. (kbuchegg)


Lesenswert?

Micha schrieb:

> Wie machen das nun die Profis!? wirklich jeden Messwert einzeln
> schreiben oder aber in einem arry zwischenpuffern

Das Betriebssystem buffert normalerweise ja schon von sich aus.
Die eigentliche Frage lautet: Was passiert wenn das System zwischendurch 
abschmiert und die gebufferten Daten verloren gehen ehe sie es aufs 
Medium schaffen. Macht das was oder ist das egal.

von Micha (Gast)


Lesenswert?

das is nicht so tragisch wenn mir die letzten paar Daten verloren gehen, 
dann müsste ich den letzten Teil der Messung eben nochmal starten.

Die jetztige Prüfsoftware und der dazugehörige Rechner laufen aber 
derzeit stabil. Abstürzen tut es nur wenn, die Putzfrau Abends kommt und 
den PC aussteck...
...damit der Staugsauger in die Steckdose eingesteckt werden kann :-)))


Dass Windows zwischendurch puffert wußte ich nicht, spielt da eignetlich 
die Programmiermgebung eine Rolle? Benütze C# auf VS Express 2008

Mir fehlt da eben die Erfahrung was "viel" Schreibzyklen sind! - 
Hauptsächlich wird sicherlich auf HDD geschrieben, und da frage ich mich 
eben ob der (deutliche) Mehraufwand fürs pagewrite gerechtfertigt ist.

von Hartmut (Gast)


Lesenswert?

Nachdem Du als Autor der Software nicht sicher weißt, was der User jetzt 
und in aller Zukunft dann damit macht, würde ich in jedem Fall die Daten 
zwischenspeichern und in größeren Blöcken auf den Datenträger schreiben.

z. B. meinst Du jetzt, daß die Daten nur auf die HD geschrieben werden. 
Die hält das problemlos aus. Aber was ist, wenn der nächste User sich 
das Logfile einfach direkt auf den USB-Stick schreiben lässt? Auch das 
ist ein Flash-Speicher mit beschränkter Anzahl von Zyklen. Selbst nach 
der Pufferung durch das Betriebssystem kommt da noch eine bedenkliche 
Anzahl von Schreibzyklen zustande.

von Vlad T. (vlad_tepesch)


Lesenswert?

Hartmut schrieb:
> würde ich in jedem Fall die Daten
> zwischenspeichern und in größeren Blöcken auf den Datenträger schreiben

für sowas gibt es bufferd streams, wenn ich mich recht erinnere

von Johnny B. (johnnyb)


Lesenswert?

Also ich würde einfach reinschreiben und fertig, soll sich doch das 
Betriebssystem darum kümmern.
Bei Festplatten brauchst Du Dich nicht um die Schreibzyklen zu kümmern.
Ich vermute mal, dass Deine Anwendung aber sowieso völlig unkritisch 
ist, auch für Flashspeicher. Denn die Datei wird ja nur ständig ergänzt 
und nicht immer wieder komplett neu erstellt.
Einen Puffer braucht es nur dort wo Deine Messdaten reinkommen, denn es 
kann zwischendurch schon mal vorkommen, dass Windows ein wenig 
beschäftigt ist und die Daten vielleicht nicht so schnell speichern kann 
wie Du möchstest.
Als Alternative zur Datei könntest Du die Daten auch in eine Datenbank 
schreiben die sich auf demselben PC oder im Netzwerk befindet. Da sind 
auch von Haus aus genügend Mechanismen vorhanden um Probleme zu 
vermeiden.
Aber wie gesagt, das mit der Datei passt schon und einfach laufend 
reinschreiben/ergänzen sollte kein Problem sein.

von sebastians (Gast)


Lesenswert?

> Ich vermute mal, dass Deine Anwendung aber sowieso völlig unkritisch
> ist, auch für Flashspeicher. Denn die Datei wird ja nur ständig ergänzt

Aber die Dateigröße wird irgendwo im Filesystem immer an der gleichen 
Stelle geschrieben wenn du deinen Datenträger nicht mit einem geeigneten 
Filesystem formatiert hast oder der Controller selbst intelligent genug 
ist, dass ers verteilt.

Trotzdem: Das ist alles nicht deine Aufgabe. Das Puffern sollte das 
Betriebssystem machen. Oder die Laufzeitbibliothek. Vielleicht musst du 
noch was konfigurieren.

von Reinhard Kern (Gast)


Lesenswert?

Micha schrieb:
> Wie machen das nun die Profis!? wirklich jeden Messwert einzeln
> schreiben oder aber in einem arry zwischenpuffern - und warum ist die
> eine Lösung besser als die andere?

Hallo Micha,

das ist ziemlich egal: der Dateisystemtreiber puffert die Daten, das 
System verwaltet einen generellen Hard Disk Cache und auf der Festplatte 
werden die Daten auch erst in einen Buffer geschrieben - das sind also 
mindestens 3 hintereinander, da kommt es auf deinen Buffer nicht mehr 
wirklich an.

Viel schwieriger ist es, dafür zu sorgen, dass die Daten unverzüglich 
auf dem Medium landen, das lohnt sich aber auch selten.

Ich würde höchstens eine oder ein paar Sekunden puffern.

Gruss Reinhard

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.