Ich habe eine Datenbank (InfluxDB), die versch. Werte speichert.
Diese kann ich auslesen und die Werte liegen mir in Form einer HashMap vor.
(Werte sind z.B.
Key: sensor, Value: ID_1
Key: temperatur, Value: 20
Nun möchte ich NUR veränderte Werte der DB in einer Liste speichern. Z. B. sobald die Temperatur sich ändert, soll ein neuer Wert für diesen Key gespeichert werden.
Ich habe überhaupt keine Idee wie ich hier vorgehen kann.
Dazu muss eine Punkt mit demselben Schlüssel erzeugt werden (Messung, Tag-Schlüssel und Wert, Zeit), einmal geschrieben, überschreibt er die vorherigen Daten für diesen Punkt.
Genau die Idee hatte ich auch. Ich wollte die HashMap einfach kopieren (also copy HashMap, die aktuell aus der DB kommt). Aber so hat die Copy IMMER die aktuellen Werte. Ein alter Stand wird niemals erreicht
Dazu muss eine Punkt mit demselben Schlüssel erzeugt werden (Messung, Tag-Schlüssel und Wert, Zeit), einmal geschrieben, überschreibt er die vorherigen Daten für diesen Punkt.
Die Anwendung ist für verschiedene User. Somit habe ich keine feste Schlüssel (also Schlüssel, die immer gleich sind für jede Anwendung). Wird die erste HashMap mit ihren Schlüsseln kopiert, so habe ich zu jedem Zeitpunkt eine Kopie der HashMap mit den aktuellsten Werten. Alte Werte werden ja nicht gespeichert, da sich die DB immer aktualisiert
Naja, wenn du alle aktuellen Werte kopierst, kriegst du auch alle aktuellen Werte raus.
Du kannst removeAll, nutzen, um aus der neuen Map alle alten zu löschen, damit hast du nur die neuen Werte.
Wenn du von einem Programmstart auf den nächsten Unterschiede finden willst, dann muss muss die Änderung in der DB hinterlegt sein und das nicht nur als neuer Wert, sondern mit einem Vermerk, dass sich was geändert hat.
Naja, wenn du alle aktuellen Werte kopierst, kriegst du auch alle aktuellen Werte raus.
Du kannst removeAll, nutzen, um aus der neuen Map alle alten zu löschen, damit hast du nur die neuen Werte.
Wenn du von einem Programmstart auf den nächsten Unterschiede finden willst, dann muss muss die Änderung in der DB hinterlegt sein und das nicht nur als neuer Wert, sondern mit einem Vermerk, dass sich was geändert hat.
Danke für deine Antwort am frühen Morgen
Genau, DAS ist erst einmal das Problem, dass jede Kopie IMMER die aktuellen Werte beinhaltet.
Änderungen sollen/können nicht in der DB hinterlegt werden. Das ist eine InfluxDB, die angebunden wird an unser System. Unser System zeigt immer nur den aktualisierten Wert an.
Aufgabe ist: nur 1 gesamte Abfrage an die DB (nicht jede Variable einzeln). Dieses Abfrage-Ergebnis, welches in einer HashMap vorliegt, dann auf aktualisierte Werte überprüfen (z.B. ob sich der Messert(Value) für SensorID1 geändert hat.
Das soll im Code selbst geschehen. Ich bin nun auf die Idee gekommen eine neue leere HashMap zu erstellen. Hier ist dann das Problem, dass ich die gleichen Keys benötige. Da die DB für Kunden ist, die immer unterschiedliche/andere Keys haben, ist auch das ein Problem. Denn dann müsste ich ja wieder mit einer Kopie arbeiten. Aber das geht ja nicht, weil eine Kopie immer auch die aktuellsten Werte vorhält. .....
Was genau hast du eigentlich vor? Weil du hast ja offensichtlich keinen "Alt" Stand, also gegen was willst du Aenderungen pruefen? Zu welchem Zeitpunkt willst du Aenderungen pruefen?
Generell ist es so: Das Framework bietet einen guten Grundstock an Klassen, aber dennoch schreibt man sich in der Regel eigene Klassen, die dann die Daten verwalten.
Du brauchst also eine Klasse, die die Daten in einer Map vorhält, aber die Änderungen mitbekommt?
JKa, dann kapsel das doch einfach in eine eigene Klasse! Du hast dann eine Klasse für diese Daten. Die kannst Du z.B. mit einer Map initialisieren.
Und dann bietet die Klasse Methoden zum Zugriff auf die Daten, zum Löschen eines Keys, zum Verändern eines Wertes.
Wenn Daten gelöscht werden, dann wird in einem Set deletedKeys das vermerkt
Wenn Daten verändert werden, dann gibt es einen Eintrag im Set changedKeys
==> Schon hast Du eine Nachverfolgung von veränderten Werten.
Da ist es wichtig, ein Verständnis zu bekommen, was Du überhaupt machst. Hier vermute ich, dass Du einfach eine Referenz gespeichert hast. Damit hast Du nur eine Map - nur eben zwei Referenzen auf diese.