Hallo,
anhand von historischen Klimadaten will ich eine Simulation für eine Sonnenstudie machen. Funktionen durchlaufen also die historischen Datenpunkte die im Prinzip eine Tabelle mit vielen Spalten sind. Ich würde die Daten in SQLite oder vielleicht auch einfach als CSV vorbereiten.
Wenn die Funktion die Datenpunkte durchschleift und bei jeder Zeile, wo zu dem Zeitpunkt eine Reihe Messwerte liegt, neu auf die Datenbank zugreifen muss, wird das vermutlich die Performance beeinträchtigen da der Flaschenhals die Festplatte ist, so denk ich mal. Die Daten können durchaus mehrere GB groß sein, so dass ein vollständiges Vorladen des kompletten Datensatzes in ein Array also in den RAM zu viel wäre.
Da ich verschiedene Funktionen mit verschiedenen Einstellungen durchtesten will würde ich gerne den Prozessor voll ausnutzen können und mehrere Simulationen in Threads stecken. Das würde dazu führen, dass die Datenquelle von mehreren Threads genutzt wird und damit würde die CSV eigentlich rausfallen. SQLite scheint das gleichzeitige Lesen zu unterstüzen. Man könnte vielleicht intervallweise die Daten auslesen also zum Beispiel immer nur 500MB aus der Datenbank in ein Array im Thread legen und dann Simulieren und dann neue 500MB laden usw. So würde man den RAM nicht überladen und die 500MB würden schnell an einem Stück aus dem RAM verarbeitet werden.
SQLite unterstützt wohl auch In-Memory vielleicht kann man damit auch was machen... kenne mich aber nicht aus damit.
Ziel wäre einfach ein Ansatz der trotz großer Daten die allergröße Performance rausholt und dabei aber den Threads auch erlaubt auf die gleichen Daten zuzugreifen. Bevor ich hier anfange Unsinn zu coden würde mich mal interessieren wie Ihr das angehen würdet. Gibt es Ansätze die besonders performant sind für sowas?
Gruße
anhand von historischen Klimadaten will ich eine Simulation für eine Sonnenstudie machen. Funktionen durchlaufen also die historischen Datenpunkte die im Prinzip eine Tabelle mit vielen Spalten sind. Ich würde die Daten in SQLite oder vielleicht auch einfach als CSV vorbereiten.
Wenn die Funktion die Datenpunkte durchschleift und bei jeder Zeile, wo zu dem Zeitpunkt eine Reihe Messwerte liegt, neu auf die Datenbank zugreifen muss, wird das vermutlich die Performance beeinträchtigen da der Flaschenhals die Festplatte ist, so denk ich mal. Die Daten können durchaus mehrere GB groß sein, so dass ein vollständiges Vorladen des kompletten Datensatzes in ein Array also in den RAM zu viel wäre.
Da ich verschiedene Funktionen mit verschiedenen Einstellungen durchtesten will würde ich gerne den Prozessor voll ausnutzen können und mehrere Simulationen in Threads stecken. Das würde dazu führen, dass die Datenquelle von mehreren Threads genutzt wird und damit würde die CSV eigentlich rausfallen. SQLite scheint das gleichzeitige Lesen zu unterstüzen. Man könnte vielleicht intervallweise die Daten auslesen also zum Beispiel immer nur 500MB aus der Datenbank in ein Array im Thread legen und dann Simulieren und dann neue 500MB laden usw. So würde man den RAM nicht überladen und die 500MB würden schnell an einem Stück aus dem RAM verarbeitet werden.
SQLite unterstützt wohl auch In-Memory vielleicht kann man damit auch was machen... kenne mich aber nicht aus damit.
Ziel wäre einfach ein Ansatz der trotz großer Daten die allergröße Performance rausholt und dabei aber den Threads auch erlaubt auf die gleichen Daten zuzugreifen. Bevor ich hier anfange Unsinn zu coden würde mich mal interessieren wie Ihr das angehen würdet. Gibt es Ansätze die besonders performant sind für sowas?
Gruße