Seite 1 von 4

Speichern großer Datenmengen

Verfasst: 20.02.2007 20:07
von RolandIV
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?

Verfasst: 20.02.2007 20:16
von Kaeru Gaman
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.

Re: Speichern großer Datenmengen

Verfasst: 20.02.2007 20:18
von Kiffi
RolandIV hat geschrieben:Wie sollte ich mit Purebasic am besten größere Datenmengen speichern?
da böte sich die Speicherung in einer Datenbank an (z.B. SQLite). Bevor ich
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

Verfasst: 20.02.2007 20:21
von PMV
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

Verfasst: 20.02.2007 20:25
von RolandIV
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

Verfasst: 20.02.2007 20:37
von Kaeru Gaman
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... ;)

Verfasst: 20.02.2007 20:57
von RolandIV
20 werte pro sekunde ist in etwa die größen ordnung. das macht in 20 stunden 1,44 mio werte.

bietet sich da noch ein array an?

ich habe mal gehört, dass man mit normalen integern schneller arbeitet, stimmt das? oder sollte ich eher auf speichergröße achten, also lieber 2 anstatt 4 bytes?

Verfasst: 20.02.2007 21:06
von Kaeru Gaman
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.

Verfasst: 20.02.2007 21:09
von RolandIV
oookay! werde mir mal deine vorschläge durch den kopf gehen lassen, das mit dem hochauflösenden timer klingt auf jeden fall sinnvoll. mit threads kenne ich mich nicht so aus, aber werde mich darüber informieren.
soweit erstmal vielen dank!

Verfasst: 20.02.2007 21:11
von Kaeru Gaman
yo gerne doch.

kannst hier in diesem topic ja einfach weiter posten, wenn noch fragen auftauchen.