moin moin,
ich stehe vor folgenden n sich recht simplen Problem.
Ich schreibe an einem Algorithmus, der Datensätze von bis zu mehreren Gigabyte verarbeiten muss. Diese will ich nicht ständig im Arbeitsspeicher liegen haben, sondern immer nur ein paar 100k Samples. Die Daten liegen grundsätzlich in der Form (x,y) oder (x,y,z) vor, sollen also pro Sample als double[] gespeichert werden.
Jetzt schweben mir zwei Verfahren vor:
1) Ich speichere die Daten in einer Datenbank und lese von dort immer den gerade benötigten Sample aus. Dazu die Frage, wie schnell ist ein solches Auslesen? Ich habe noch nicht mit Datenbanken gearbeitet, bräuchte also etwas Zeit mich einzuarbeiten und dazu muss es dann zumindest schnell sein.
2) Ich lege eine (temporäre) Datei für jede Liste an. In der Datei werden die Samples jeweils hintereinander weg als Double mit einem RandomAcessFile gespeicher und gelesen. Ich halte jeweils einen gewissen Teil des Datensatzes in einem internen Buffer. Meistens muss ich die Daten sequenziell auslesen, so dass ich auf diesem weg nur dann denn Buffer neu lesen müsste, wenn ich auf einen Wert zugreife, der außerhalb liegt (was dan ja selten vorkäme).
Sollte der Buffer größer als der Datensatz sein, so wird nie auf die Festplatte zugegriffen, da auch erst dann auf die Festplatte geschrieben würde, wenn der Buffer voll ist.
Ich frage mich dazu: Welches Verfahren ist portabler, schneller (über DB weiß ich leider nichts), etc.. Kennt ihr evtl. eine Library die etwas ähnliches umsetzt?
ich wäre euch für eure Hilfe sehr dankbar!!!
Mit besten Grüßen
Tembudrus
ich stehe vor folgenden n sich recht simplen Problem.
Ich schreibe an einem Algorithmus, der Datensätze von bis zu mehreren Gigabyte verarbeiten muss. Diese will ich nicht ständig im Arbeitsspeicher liegen haben, sondern immer nur ein paar 100k Samples. Die Daten liegen grundsätzlich in der Form (x,y) oder (x,y,z) vor, sollen also pro Sample als double[] gespeichert werden.
Jetzt schweben mir zwei Verfahren vor:
1) Ich speichere die Daten in einer Datenbank und lese von dort immer den gerade benötigten Sample aus. Dazu die Frage, wie schnell ist ein solches Auslesen? Ich habe noch nicht mit Datenbanken gearbeitet, bräuchte also etwas Zeit mich einzuarbeiten und dazu muss es dann zumindest schnell sein.
2) Ich lege eine (temporäre) Datei für jede Liste an. In der Datei werden die Samples jeweils hintereinander weg als Double mit einem RandomAcessFile gespeicher und gelesen. Ich halte jeweils einen gewissen Teil des Datensatzes in einem internen Buffer. Meistens muss ich die Daten sequenziell auslesen, so dass ich auf diesem weg nur dann denn Buffer neu lesen müsste, wenn ich auf einen Wert zugreife, der außerhalb liegt (was dan ja selten vorkäme).
Sollte der Buffer größer als der Datensatz sein, so wird nie auf die Festplatte zugegriffen, da auch erst dann auf die Festplatte geschrieben würde, wenn der Buffer voll ist.
Ich frage mich dazu: Welches Verfahren ist portabler, schneller (über DB weiß ich leider nichts), etc.. Kennt ihr evtl. eine Library die etwas ähnliches umsetzt?
ich wäre euch für eure Hilfe sehr dankbar!!!
Mit besten Grüßen
Tembudrus