# XML/SQLite sinnvoll?



## JuleXYZ (15. Feb 2016)

Hallo zusammen,

ich habe ein Java-Programm (f(x)), welches ausgehend von einem Übergabeparameter (x) ein Ergebnis y berechnet und zurückgibt. Während der Berechnung von f(x) sollen Zwischenergebnisse gespeichert werden. Da es von einem anderen Programm aufgerufen wird, weiß es weder wann es das erste Mal  noch wann es das letzte Mal aufgerufen wird. Außerdem kann es sein, dass mehrere Instanzen gleichzeitig ausgeführt werden!

Zunächst hatte ich überlegt für jede Berechnung eine XML-Datei zu erstellen. Ich hätte dann quasi einen Ordner mit vielen XML-Dateien, eben für jeden Aufruf. Das finde ich allerdings für eine spätere Auswertung unhübsch (schließlich muss zunächst der gesamte Ordner eingelesen werden bevor die Daten ausgewertet werden können). Außerdem würden redundante Daten gehalten.

Eine nächste Idee ist, die Ergebnisse in einer SQLite-Datei zu sichern. (Auf eine SQL-DB würde ich wegen Installationsaufwand für die späteren Endnutzer sehr gerne verzichten!) Nun ist aber das Problem, dass unter Umständen mehrere Schreibzugriffe gleichzeitig erfolgen könnten. Kann man an der Stelle warten bis die Datei wieder unlocked ist? Oder wird mit einer Exception abgebrochen?

Oder hat jemand vielleicht eine bessere Idee?

Schonmal lieben Dank für alle Anregungen!


----------



## Thallius (15. Feb 2016)

Mal davon abgesehen, dass gerade dafür ein DB da ist, damit man eben mit mehreren Task auf die gleichen Dante schreiben kann: In welchem Fall würden denn zwei Task gleichzeitig auf die selbe Row in der gleichen Table schreibend zugreifen?

Gruß

Claus


----------



## JuleXYZ (16. Feb 2016)

Erstmal vielen Dank für die Antwort!

Was passieren kann ist, dass das äußere Programm zwecks Parallelisierung mehrere Instanzen von f(x) aufruft. (Das liegt nicht in meiner Hand..) Das heißt zwei Instanzen könnten gleichzeitig in die eine Datei schreiben wollen(nur einfügen). Nicht aber auf die selbe Row! Meinem Verständnis nach wird die SQLite-Datei bei einem Schreibvorgang aber komplett gesperrt, oder?


----------



## Thallius (16. Feb 2016)

Das stimmt. SQLite ist da leider sehr limitiert... Ist halt die Frage wie oft überhaupt geschrieben wird. Wenn es alle paar 1/10tel sekunden nur einmal ist, sollte es eh kein Problem sein. Wenn du alle paar millisekunden speichern must dann hast du ein Problem das du mit so kleinen Boardmitteln eh nicht gelöst bekommst.

Gruß

Claus


----------



## JuleXYZ (16. Feb 2016)

Vielen Dank für die schnelle Rückmeldung! 

Die Berechnung von f(x) dauert sehr lange, sodass ein Schreiben nur alle paar Sekunden geschehen würde, ich gehe davon aus, dass eine "Kollision" somit auch nicht häufig passieren würde. Regelt SQLite das dann von alleine? Oder müsste ich eine Routine schreiben, die wartet bis die Datei unlocked ist?


----------



## Thallius (16. Feb 2016)

Das würde ich einfach mal ausprobieren. Man kann SQLite mit ganz vielen verschiedenen Parametern kompilieren. Ich habe keine Ahnung welche Version Du da dann hast.


----------

