Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe eine Liste von Daten ca ein paar hundert Datensätze welche von Unterschiedlichen Threads und Funktionen verändert werden sollen.
Das ganze ist eine Desktop Anwendung.
Die Orte sind am Anfang gegeben, es können aber auch neue hinzukommen.
So nun gibt es verschiedene Funktionen die auch mehrmals paralell in Threads laufen und die Orte um zusätzliche Daten ergänzen.
z.b. den Temperaturabfrager
Windabfrager
Feuchtigkeitsabfrager
Frage ist wie kann ich die Daten Thread Sicher ablegen? Reicht evtl eine Liste oder eine HashMap oder sollte ich evtl doch eine Datenbanklösung in betracht ziehen ?
Ich möchte nicht sonderliche viel mit der Anwendung ausliefern, wie geeignet ist JavaDB ? Was ist performance mässig besser.
Mit SQL würde ich das so realisieren.
1 Datensatz ziehen, wenn möglich Datensatz locken.
Wert ermitteln.
Datensatz verändern.
Datensatz unlocken.
Ob sich das mit nem Array oder ner HashMap ThreadSave realisieren lässt habe ich keine Ahnung, und wie performant das ist auchnicht.
kommt drauf an wie häufig du das ganze persistieren (=auf platte speichern) musst. Wenn dies häufig der Fall ist würde ich auf eine Datenbank setzen. Desweiteren kommt es drauf an wieviele Datensätze du im Speicher halten willst / kannst. Für ein paar Hundert Datensätze kannst du eigentlich alles im Speicher halten und am ende der Anwendung bzw wenn der User "Save" clickt abspeichern. Alternativ kannst du in einem Thread eine art autosave alle x sekunden machen. Dann würde ich eine ConcurrentLinkedList oder ähnliches aus dem paket java.util.concurrent nehmen, die von haus aus synchronisiert sind.
Was du noch in betracht ziehen solltest, ist ob sich die Datenstruktur ändern kann. Wenn du an einem Serialisierten objekt etwas änders (den attributen), dann kann der alte stand nicht mehr gelesen werden, es sei denn du implementierst es von hand. Mit Externalizable kannst du sowas auch einfach machen und die liste von hand wiederherstellen. ist eigentlich recht easy
Speichern muss ich das eigentlich nur beim Beenden der Anwendung und beim Starten.
Die Struktur ändert sich garnicht bis sehr selten. Die frage ist eher was von der verarbeitung her schneller ist. Von der menge her sind es wohl einige hundert bis wenige Tausend Datensätze.
Persönlich bin ich halt ansonsten relativ Datenbank Affin da ich meistens mit PHP+MySQL arbeite hab ich auch mit den Listen wenig Erfahrung
MySQL fällt weg, die Anwendung soll Idiotensicher sein und einfach zu Installieren möglichst portable vom usb stick Lauffähig sein.
Über ne DB würde sich das schon reallisieren lassen indem nicht der Thread selbst den Datensatz aus der DB abfragt, sondern dieser bereits an ihn übergeben wird.
Wie Funktioniert denn diese JAVA DB, das ist Quasi ne Desktop Datenbank oder ?
Kann man die einfach mit ausliefern?
Falls Du wirklich zu dieser Lösung tendierst, wäre es vielleicht noch interessant für Dich zu wissen, das es da eine leistungfähige Alternative zu JavaDB gibt: H2 Database Engine
Ich für meinen Teil arbeite viel lieber mit dieser Alternative.
JavaDB oder auch Derby genannt ist völlig unkompliziert mit der Anwendung auszuliefern. Die Software besteht aus einer Handvoll jar Dateien. Die Daten selbst werden in ein Verzeichnis deiner Wahl abgelegt.