Speichern großer Datenmengen
Speichern großer Datenmengen
Wie sollte ich mit Purebasic am besten größere Datenmengen speichern?
Es handelt sich um mehrere Millionen Messwerte, kann ich da einfach LinkedLists oder Arrays benutzen oder muss ich da auf andere Methoden zurückgreifen wie z.b. externes Speichern auf Dateien?
Es handelt sich um mehrere Millionen Messwerte, kann ich da einfach LinkedLists oder Arrays benutzen oder muss ich da auf andere Methoden zurückgreifen wie z.b. externes Speichern auf Dateien?
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
kommt drauf an, woher du die meßwerte bekommst,
wie schnell/oft, und wie groß jeder einzelne wert ist.
wenn du teile davon aufm bildschirm darstellen willst, ist es durchaus sinnvoll,
sie im speicher zu haben, oder zumindest einen teil davon.
wenn es aber auf die dauer doch sehr viele daten werden, ist auslagern in eine datei zu empfehlen.
wie schnell/oft, und wie groß jeder einzelne wert ist.
wenn du teile davon aufm bildschirm darstellen willst, ist es durchaus sinnvoll,
sie im speicher zu haben, oder zumindest einen teil davon.
wenn es aber auf die dauer doch sehr viele daten werden, ist auslagern in eine datei zu empfehlen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Speichern großer Datenmengen
da böte sich die Speicherung in einer Datenbank an (z.B. SQLite). Bevor ichRolandIV hat geschrieben:Wie sollte ich mit Purebasic am besten größere Datenmengen speichern?
hier ausführlicher auf das Thema eingehe, wäre es von Vorteil, wenn Du kurz
beschreiben würdest, wie Du die Messwerte bekommst.
Grüße ... Kiffi
a²+b²=mc²
Die Frage ist, was du damit machen willst. Wie viel Daten es am ende
wirklich sind. Was ist die Umgebung des Programms, also welche
Ressorcen stehen zur verfügung?
Bei mehreren millionen Werten würde ich nicht unbedingt ne Linkedliste
nutzen. Wenn du wirklich für jeden Wert ein Element brauchst, haste am
Ende das 3 oder 4 fache an Daten. Zudem wäre das durchblättern der
Werte sehr zeitaufwendig.
Wenn du die Werte allerdings garnicht unbedingt ständig brauchst, wäre
auslagern besser. Was ist bei einem Programmabsturz? Richtig, alle
Daten wären weg ... also extern Speichern ist so wie so notwendig.
MFG PMV
wirklich sind. Was ist die Umgebung des Programms, also welche
Ressorcen stehen zur verfügung?
Bei mehreren millionen Werten würde ich nicht unbedingt ne Linkedliste
nutzen. Wenn du wirklich für jeden Wert ein Element brauchst, haste am
Ende das 3 oder 4 fache an Daten. Zudem wäre das durchblättern der
Werte sehr zeitaufwendig.
Wenn du die Werte allerdings garnicht unbedingt ständig brauchst, wäre
auslagern besser. Was ist bei einem Programmabsturz? Richtig, alle
Daten wären weg ... also extern Speichern ist so wie so notwendig.
MFG PMV
es werden messwerte von einem foucault'schen pendel ausgelesen. das geht über eine computer-kugelmaus, die mit dem pendelfaden verbunden ist, also wenn sich das pendel bewegt, bewegt sich die y-koordinate der computermaus auf dem bildschirm hoch und runter.
die schwingungsspur soll aufgezeichnet werden, gleichzeitig auf dem bildschirm ausgegeben werden und später wieder abrufbar sein.
geplant sind langzeitmessungen über 20 stunden.
das programm soll auf einem normalen pc/laptop laufen, also geht mal so von 2GHz aus, 256 MB hauptspeicher
die schwingungsspur soll aufgezeichnet werden, gleichzeitig auf dem bildschirm ausgegeben werden und später wieder abrufbar sein.
geplant sind langzeitmessungen über 20 stunden.
das programm soll auf einem normalen pc/laptop laufen, also geht mal so von 2GHz aus, 256 MB hauptspeicher
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
dann kommts noch drauf an, wie schnell das pendel schwingt
also, ob du 20x, 50x oder 100x pro sekunde nen wert auslesen willst.
bei 50x käm das immerhin auf 72000 werte in 20h,
wenn jeder meßwert als Word gespeichert wird sind das 144000 Byte,
also gut 140 KB, das ist auch in sekunden geladen/gespeichert.
ich würde die werte in ein Array schreiben(*),
und alle paar sekunden die neuen werte an die datei auf platte anhängen.
insgesamt aber alles im speicher halten, dann kannst du so anzeigen wie du lust hast.
aber bei so meßwerten wär ne datenbank evtl. überproportioniert,
als RAW-Werte-Datei ist imho ausreichend.
PS:
(*) wenn du noch öfter auslesen willst, ist ein direkter speicherzugriff besser,
und dann die meßwerte in den speicher schreiben in einem eigenen thread der auch mit hoher priorität läuft.
....sag ich mal so...
also, ob du 20x, 50x oder 100x pro sekunde nen wert auslesen willst.
bei 50x käm das immerhin auf 72000 werte in 20h,
wenn jeder meßwert als Word gespeichert wird sind das 144000 Byte,
also gut 140 KB, das ist auch in sekunden geladen/gespeichert.
ich würde die werte in ein Array schreiben(*),
und alle paar sekunden die neuen werte an die datei auf platte anhängen.
insgesamt aber alles im speicher halten, dann kannst du so anzeigen wie du lust hast.
aber bei so meßwerten wär ne datenbank evtl. überproportioniert,
als RAW-Werte-Datei ist imho ausreichend.
PS:
(*) wenn du noch öfter auslesen willst, ist ein direkter speicherzugriff besser,
und dann die meßwerte in den speicher schreiben in einem eigenen thread der auch mit hoher priorität läuft.
....sag ich mal so...

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ups.. hab mich verrechnet... xD
72.000 sind die sekunden in 20h...
> ich habe mal gehört, dass man mit normalen integern schneller arbeitet, stimmt das
mit integern in registergröße, also in diesem fall 32bit. ja stimmt.
> oder sollte ich eher auf speichergröße achten, also lieber 2 anstatt 4 bytes?
musst du selber entscheiden.
20 checks pro sekunde ist nicht so kritisch,
und knapp 6MB daten sind auch nicht wirklich kritisch...
also, das wäre mit nem array lösbar, aber ich meine,
ein thread mit hoher priorität würde sich trotzdem empfehlen,
weil du ja wohl ungern große zeitabweichungen haben willst,
sonst ist das projekt ja ad absurdum geführt.
außerdem sollte man dann wohl auch mit nem präzisionstimer arbeiten,
das normale ElapsedMilliseconds hat ne ungenauigkeit von ca.13ms.
72.000 sind die sekunden in 20h...
> ich habe mal gehört, dass man mit normalen integern schneller arbeitet, stimmt das
mit integern in registergröße, also in diesem fall 32bit. ja stimmt.
> oder sollte ich eher auf speichergröße achten, also lieber 2 anstatt 4 bytes?
musst du selber entscheiden.
20 checks pro sekunde ist nicht so kritisch,
und knapp 6MB daten sind auch nicht wirklich kritisch...
also, das wäre mit nem array lösbar, aber ich meine,
ein thread mit hoher priorität würde sich trotzdem empfehlen,
weil du ja wohl ungern große zeitabweichungen haben willst,
sonst ist das projekt ja ad absurdum geführt.
außerdem sollte man dann wohl auch mit nem präzisionstimer arbeiten,
das normale ElapsedMilliseconds hat ne ungenauigkeit von ca.13ms.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22