Forum: PC-Programmierung Große Datenmengen effizient darstellen


von Tobias S. (tobias_s56)


Lesenswert?

Hallo zusammen,

ich arbeite zur Zeit an einem Viewer für geloggte Daten. Die 
Programmiersprache ist VB NET. Bei den Daten handelt es sich primär um 2 
Kanäle mit UInt16 Werten, die mit 64 Hz aufgezeichnet werden. Diese 
Aufzeichnungen können teilweise recht lang werden - bis zu 5 Jahre, was 
dann etwa 40 GB an Daten entspricht.

Nun frage ich mich, welche Techniken es gibt, um diese Daten möglichst 
performant in Kurvenform im zeitlichen Verlauf darstellen zu können. Der 
Viewer hat eine Zeitachse, die zwischen 5 Jahren und 1 Sekunde in 
mehreren Stufen einstellbar ist. Ich möchte also die gesamten 5 Jahre 
auf einmal sehen und dann per Mausrad soweit hineinzoomen können, bis 
ich einzelne 64 Hz Werte erkennen kann. Das ganze sollte ohne größeres 
Ruckeln oder störende Nachladezeiten möglich sein.

Meine jetzige Lösung funktioniert zwar, aber ich glaube nicht, dass sie 
der Weisheit letzter Schluss ist. Sie sieht momentan so aus, dass ich 
beim ersten Öffnen einer Logdatei aus selbiger weitere Dateien 
verschiedener zeitlicher Auflösungen erzeuge, die jeweils das Minimum 
und Maximum innerhalb eines Zeitabschnitts der nächst höheren Auflösung 
eines jeden Kanals beinhalten. Der Viewer entscheidet dann während des 
Zoomens, welche zeitliche Auflösung niedrig genug ist, um schnell genug 
geladen werden zu können und hoch genug, um die verfügbaren Pixel 
bestens auszunutzen.

Hat jemand eine Idee, wie man so etwas effizienter hinbekommt? Die beim 
Downsampling erzeugten Dateien sind recht groß und das erste Öffnen 
dauert entsprechend lange. Das ist zwar beides notfalls vertretbar, aber 
es geht doch sicher besser. Wie machen die Profis das? Ich denke da z.B. 
an WAV-Editoren.

Vielen Dank für alle Tips!

Gruß

Tobias

von Arc N. (arc)


Lesenswert?

Die erste Frage ist, wie genau müssen die "Übersichtskurven" dargestellt 
werden bzw. was ist "wichtig" (Minima/Maxima/Sprünge)?

von Tobias S. (tobias_s56)


Lesenswert?

Das Erkennen von Minima und Maxima muss auf jeden Fall in jedem 
Zeitintervall möglich sein.  Soll heißen: Wenn auch nur ein 64 Hz Sample 
einen Peak aufweist, muss dieser auch in der 5-Jahres-Ansicht sichtbar 
sein.

von Arc N. (arc)


Lesenswert?

Tobias S. schrieb:
> Das Erkennen von Minima und Maxima muss auf jeden Fall in jedem
> Zeitintervall möglich sein.  Soll heißen: Wenn auch nur ein 64 Hz Sample
> einen Peak aufweist, muss dieser auch in der 5-Jahres-Ansicht sichtbar
> sein.

Dann muss der gesamten Datenbestand min. einmal "angefasst" werden 1) 
oder wird/könnte das schon während der Aufzeichnung bspw. für bestimmte 
Intervalle gemacht werden (bspw. Min/Max für jede Stunde)?

Was man noch machen könnte, wäre u.U. für ein Intervall eine 
Interpolation aus und durch x-Stützstellen zu erzeugen und die Min/Max 
dieses Intervalls immer mit hinzuzunehmen

1) Ist eine nette Aufgabe. Wer's lösen will: Gesucht, ein Algorithmus 
der deutlich weniger als 2n Vergleiche benötigt um Min und Max in einem 
unsortierten Array zu finden...

von Tobias S. (tobias_s56)


Lesenswert?

Hey.. Danke für's Mitgrübeln :)

Am Format der Aufzeichnung lässt sich leider nichts mehr ändern.

Naja, im Notfall bleibt eben alles wie's ist. Hatte gehofft, den 
Speicherbedarf ein wenig reduzieren zu können, aber andererseits kommts 
heutzutage ja nicht auf ein paar GB mehr oder weniger an.

von Arc N. (arc)


Lesenswert?

Tobias S. schrieb:
> Hey.. Danke für's Mitgrübeln :)
>
> Am Format der Aufzeichnung lässt sich leider nichts mehr ändern.
>
> Naja, im Notfall bleibt eben alles wie's ist. Hatte gehofft, den
> Speicherbedarf ein wenig reduzieren zu können, aber andererseits kommts
> heutzutage ja nicht auf ein paar GB mehr oder weniger an.

So viel ist das ja nicht... Angenommen der Benutzer hätte vier Monitore 
mit 2560x1600 dann reichen 2560 x 4 x (2 Kanäle) Werte für die Übersicht 
und entsprechend mehr für die Zwischenstufen und (je nach CPU, GPU) ab 
vielleicht weniger als 8192 Werten pro Pixel die zusammengefasst werden 
müssen, kann das ganze in Echtzeit (60 Hz) gerechnet werden.

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.