Speichern großer Datenmengen

Für allgemeine Fragen zur Programmierung mit PureBasic.
RolandIV
Beiträge: 28
Registriert: 11.09.2004 13:33

Speichern großer Datenmengen

Beitrag 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?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Speichern großer Datenmengen

Beitrag 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
a²+b²=mc²
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
RolandIV
Beiträge: 28
Registriert: 11.09.2004 13:33

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
RolandIV
Beiträge: 28
Registriert: 11.09.2004 13:33

Beitrag 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?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
RolandIV
Beiträge: 28
Registriert: 11.09.2004 13:33

Beitrag 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!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo gerne doch.

kannst hier in diesem topic ja einfach weiter posten, wenn noch fragen auftauchen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten