Seite 1 von 1

Temporäre Datenhaltung

Verfasst: Dienstag 18. März 2008, 08:23
von george
Hallo,

ich bin gerade dabei ein Programm zur Auswertung von Messdaten zu erstellen. Die Messdaten liegen in Form von binären Textdateien vor und enthalten jeweils ca 300000 Messreihen mit jeweils 12Messpunkten.
Das Programm soll mehrere Messdateien lesen können, so dass man von einer Datensatzgröße >1Million ausgehen kann. Das Parsen der Dateien funktioniert soweit alles schon.
Meine Frage ist jetzt, welche temporäre Datenhaltung bietet sich an, um die Datensätze für eine grafische Darstellung und statistische Auswertung bereitzustellen?

Ich gehe derzeit von zwei Möglichkeiten aus:

1.) SQLite

Habe ich schon mal testweise implementiert. In anderen Threads im Forum habe ich schon gelesen, dass SQLite für große Datenmengen ungeeignet ist. Deshalb gehe ich davon aus, dass es für meine Zwecke nicht nutzbar ist.
Um die Performance zu testen, habe ich mal 300000 Datensätze in eine SQLite Tabelle eingefügt. Dies hat "unglaubliche" 38 Sekunden gedauert. Der besondere Charme bei dieser Variante wäre die schnelle Filterung der Daten im SQL Style

2.) Speichern der Daten in einer Liste

Hier wäre jetzt meine Frage, ist eine Liste geeignet, um Datensätze >1Million(>20MByte) temporär zu speichern?

Wäre über Infos dankbar

Danke george

Re: Temporäre Datenhaltung

Verfasst: Dienstag 18. März 2008, 09:12
von gerold
george hat geschrieben:Habe ich schon mal testweise implementiert. In anderen Threads im Forum habe ich schon gelesen, dass SQLite für große Datenmengen ungeeignet ist. Deshalb gehe ich davon aus, dass es für meine Zwecke nicht nutzbar ist.
Um die Performance zu testen, habe ich mal 300000 Datensätze in eine SQLite Tabelle eingefügt. Dies hat "unglaubliche" 38 Sekunden gedauert. Der besondere Charme bei dieser Variante wäre die schnelle Filterung der Daten im SQL Style
Hallo george!

Beim Zugriff auf einen Datenbankserver rechne ich für das Schreiben oder Auslesen von Daten im Mittel mit 1 Sekunde für 1000 Datensätze. Wie du siehst ist SQLite viel schneller. Und ein paar Gigabyte an Daten macht dem Ding überhaupt nichts. Du darfst nur nicht von mehreren Programmen aus gleichzeitig darauf zugreifen. Dafür ist es nicht gemacht.

Verpasst du der Tabelle noch einen Index für das oder die Felder nach denen du filtern möchtest, dann ist das vielleicht gar keine so schlechte Lösung für dich. Ich weiß ja nicht was du mit den Daten machen willst. Je flexibler -- desto Datenbank.

Schneller geht es, wenn du eine eigene Speicherlösung entwickelst, die genau an deine Anforderungen angepasst ist. Mit eigenem Index usw. Das ist nicht so flexibel und kostet Arbeitszeit. Dafür ist es schnell.

Falls du nur einen Schlüssel hast, nach dem du suchen musst, dann kannst du evt. mit Shelve etwas anfangen. Das verhält sich wie ein Dictionary. Mit dem Unterschied, dass die Daten im Dateisystem liegen.

Aber mir schwirrt da immer noch dein "statistische Auswertung" im Kopf herum. Und für so etwas ist eine Datenbank meist die beste Lösung. Ist 30 Sekunden so schlimm? Vielleicht könnte man dein Programm noch ein wenig optimieren. Z.B. könntest du nur alle 10.000 Datensätze ein COMMIT machen. Oder man könnte teste ob es einen Unterschied gibt ob alle 10.000 Datensätze ein COMMIT gemacht wird oder nur am Schluss. Usw. -- Ach was. Mach einfach nur am Schluss ein COMMIT und passt schon.

mfg
Gerold
:-)

Verfasst: Dienstag 18. März 2008, 10:44
von Leonidas
Die Möglichkeit auf PostgreSQL zu wechseln hat man ja quasi immer. Den meisten ORMs ist es recht egal ob sie auf SQLite oder Postgres aufsetzen.

Verfasst: Dienstag 18. März 2008, 15:06
von george
Hallo,

danke für eure Antworten. Ich habe mir jetzt ein eigenes Speichermodel mit den entsprechenden Zugriffsfunktionen erstellt. Die Daten werden hierbei jetzt in einer Werteliste gehalten und bei Bedarf in eine Textdatei kopiert. Wesentlicher Vorteil bei dieser Variante ist die Performance (ca. 38Sekunden vs. ca 12Sekunden)

Gruss george