Synchronisation Datenquelle und Anwendung (Multi-User)

Status
Nicht offen für weitere Antworten.

AlArenal

Top Contributor
Folgende Situation:
Für eine neu zu erstellende Anwendung suche ich einen Weg den Datentopf (eine SQL-Datenbank) und die aus den Daten generierten Instanzen in einer Anwendung zu synchronisieren. D.h. Änderungen an den Instanzen führt zu INSERT/UPDATE/DELETE in der DB und die Anwendung muss nach INSERT/UPDATE/DELETE in der DB seine Datenstrukturen und Instanzen entsprechend abändern.
Die Daten selber werden nicht mit JDBC hin- und hergeschoben, sondern über einen Webservice (XML-RPC).

Ansatz:
1. Jede Tabelle der DB bekommt ein Feld mit einem Timestamp, der bei INSERT/UPDATE mit dem aktuellen Wert belegt wird.
2. Vor einem UPDATE wird geprüft, ob die vorhandene Zeile keinen neueren Timestamp hat / überhaupt noch vorhanden ist.
3. (Un-)Regelmäßig wird der aktuellste Timestamp der Tabellen gelesen und abgeglichen. Differenzen führen zur Synchronisierung der Instanzen.


Derzeit frage ich mich noch wie ich das Ganze in der Anwendung möglichst vorausschauend umsetze. Soll ich meine Daten-Objekt-Instanzen zentral observieren lassen, so dass Änderungen an ihnen zentral registriert und an die DB weitergereicht werden können? Speichere ich den Timestamp dann in den Instanzen, oder ebenfalls zentral in einer Map? Detektiere ich Änderungen an der DB mit nem Thread und nem Timer im Hintergrund, oder erst beim nächsten nötigen Zugriff auf die Datenbank?

Irgendwie finde ich im Netz nichts richtiges zum Thema, mglw. kommt bei den Suchbegriffen auch erst alles andere, aber nicht das, was ich speziell suche. Die Problematik als solche kann aber nicht neu sein, d.h. es muss irgendwo Erfahrungswerte geben..
 

TRunKX

Bekanntes Mitglied
Sieh dir mal CVS Systeme an die arbeiten da auch mit. Problem wird werden wen ein Datensatz gleichzeitig von 2 oder mehr Leuten geändert wird. Angezeigte Daten sind bei Multi USer nicht immer Aktuell da du jedem User ja eine Kopie aushändigen musst damit er damit arbeiten kann. Dann stellt sich die Frage ist die letzte Modifikation immer die beste? Oder kann es sein das die Modifikationen die der Cheff macht immer die besten?

Naja alles fragen die geklärt werden müssen bevor du da näher reingehst. Achja ich glaube ich habe mich jetzt dazu hinreissen lassen virl zu viel und am Thema vorbei zu schreiben.


Also meine Empfehlung jeder bekommt beim Start ne aktuelle DB und darf dann arbeiten alle Stunde wird abgeglichen und es wird alles was geändert wurde implementiert bei doppeländerungen bekommt immer der letzte den Zuschlag!
 

Sky

Top Contributor
TRunKX hat gesagt.:
wen ein Datensatz gleichzeitig von 2 oder mehr Leuten geändert wird.
"gleichzeitig" kann man einen Datensatz nicht ändern. An irgendeiner Stelle wird wohl in eine Sequenz gebracht werden.

TRunKX hat gesagt.:
Angezeigte Daten sind bei Multi USer nicht immer Aktuell da du jedem User ja eine Kopie aushändigen musst damit er damit arbeiten kann. Dann stellt sich die Frage ist die letzte Modifikation immer die beste? Oder kann es sein das die Modifikationen die der Cheff macht immer die besten?
Hier ist das einfachste: Wurde ein Datensatz zwischenzeitlich geändert, so werden Änderungen, die auf dem Datensatz basieren nicht akzeptiert.

TRunKX hat gesagt.:
Also meine Empfehlung jeder bekommt beim Start ne aktuelle DB und darf dann arbeiten alle Stunde wird abgeglichen und es wird alles was geändert wurde implementiert bei doppeländerungen bekommt immer der letzte den Zuschlag!
Das kommt m.E. ganz auf die Anforderung an. Je nachdem wer wie oft welche Daten ändert kann es von "Aktualisierung nur beim Versuch Datensatz zu ändern" bis "sofortige Aktualisierung bei Änderung in der DB" viele Möglichkeiten geben.
 

TRunKX

Bekanntes Mitglied
... *mowl* :bae:

Hast ja recht...... :!: Aber man schreibt nicht nur Artikel zum Kommentieren vorhergegangener Artikel.

:meld: Aber du hast das mit 2 oder mehr falsch verstanden es ging darum wann die Daten eintreffen die geändert wurden. Und wen ein DS geändert wurde aber bei jemandem anderen bearbeitet wird. Wenn dann der 2. nicht schreiben darf dann kann ich nicht vernünftig arbeiten! :meld:
 

Sky

Top Contributor
TRunKX hat gesagt.:
Wenn dann der 2. nicht schreiben darf dann kann ich nicht vernünftig arbeiten! :meld:
Naja, aber das ist erstens doch wieder Abhängig von der Anforderung und zweitens das einfacher als dein Vorschlag mit der Entscheidungslogik ("stellt sich die Frage ist die letzte Modifikation immer die beste?").
 

TRunKX

Bekanntes Mitglied
:### Ich wühle mal Firmenunterlagen zu dem Mist jetzt bin ich leicht angepisst! :### :!: Und siehe da! Sollten 2 Änderungen gemacht worden sein so wird dem der die letzte Änderung macht beides Vorgelegt wie bei einem CVS und er muss entscheiden was bleibt!

ISt auf Jeden Fall mal nen guter Ansatz um das (vermutlich fast nie) auftretende Problem zu beheben!
 

AlArenal

Top Contributor
Sky hat gesagt.:
Hier ist das einfachste: Wurde ein Datensatz zwischenzeitlich geändert, so werden Änderungen, die auf dem Datensatz basieren nicht akzeptiert.

Also SELECT vor UPDATE (und ggf. auch vor INSERT, wenn man noch Fremdschlüssel braucht) und ZUrückweisen der Änderung, wenn die DB nen aktuelleren Stand hat als die lokalen Daten. An sowas hatte ich auch gedacht.

TRunKX hat gesagt.:
Also meine Empfehlung jeder bekommt beim Start ne aktuelle DB und darf dann arbeiten alle Stunde wird abgeglichen und es wird alles was geändert wurde implementiert bei doppeländerungen bekommt immer der letzte den Zuschlag!

Ich kann nicht jedem eine Kopie der DB geben. Die DB besteht sowohl aus anwendungsspezifischen Tabellen, zu denen auch die anderer Anwendungen gehören, deren Datenbestände untereinander verlinkt sind und wo man nie weiß wer da gerade wie drauf Zugriff hat ;)

Das kommt m.E. ganz auf die Anforderung an. Je nachdem wer wie oft welche Daten ändert kann es von "Aktualisierung nur beim Versuch Datensatz zu ändern" bis "sofortige Aktualisierung bei Änderung in der DB" viele Möglichkeiten geben.

Naja, sofortige Aktualisierung scheidet bei der Anbindung eines Java-Clients über einen Web-Service aus, da nur der Client Anfragen initiieren kann. Der Server ist gewissermaßen "dumm". Vermutlich werde ich mit "Aktualisierung nur beim Versuch Datensatz zu ändern" beginnen, anschließend eine manuelle Aktualisierung implementieren und später evtl. vielleicht. auch ne periodische.
 

Bleiglanz

Gesperrter Benutzer
gutmütig

mit timestamp, der erste gewinnt, der zweite kriegt ne Fehlermeldung

heisst irgendwie "optimistic offline concurrency"

paranoid:

globaler Lock auf den Record: nur immer einer darf den überhaupt auschecken, timeout erforderlich usw.


gar nichts zu tun, so dass der zweite gewinnt und der erste (unbemerkt) verliert macht man eigentlich NIE (eventuell halt bei supervolatilen sachen)


ganz brauchbar ist:

"Patterns of Enterprise Applications" von Fowler, der diskutiert einige Ansätze, sonst kenne ich auch nix gescheites
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Daten-Synchronisation Client <-> Datenquelle (DB) ? Allgemeine Java-Themen 6
T Synchronisation einer Textdatei im Groupshare Allgemeine Java-Themen 1
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
K Threads - Swing - Synchronisation nötig? Allgemeine Java-Themen 8
K Thread Synchronisation Allgemeine Java-Themen 8
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
F Bluetooth / Synchronisation : Problem mit einer Bluetoothanwendung Allgemeine Java-Themen 3
T Project Synchronisation Allgemeine Java-Themen 4
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
B Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 10
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
H Thread Synchronisation. mutex.lock(); und mutex.unlock(); Allgemeine Java-Themen 4
S Synchronisation von Threads Allgemeine Java-Themen 7
T problem mit synchronisation Allgemeine Java-Themen 4
G Links zum Thema Synchronisation Allgemeine Java-Themen 7
H LRUMap und Synchronisation Allgemeine Java-Themen 5
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
S synchronisation einer Methode abhängig vom Parameter Allgemeine Java-Themen 10
S Threads und Synchronisation Allgemeine Java-Themen 3
C Synchronisation aber trotzdem parallel lesen Allgemeine Java-Themen 2
L Apache POI Datenquelle Allgemeine Java-Themen 1
B Suche Datenquelle für lizenz-informationen Allgemeine Java-Themen 5
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
OSchriever Externe Anwendung beenden Allgemeine Java-Themen 41
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
J exe Anwendung CPU-/Speicherverbauch Allgemeine Java-Themen 5
alderwaran Hoher Sys-Load bei Multithreaded Anwendung Allgemeine Java-Themen 8
S Anwendung die alle Abhaengigkeiten einer Library listet..? Allgemeine Java-Themen 5
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
D Anwendung öffnet hinter Taskleiste Allgemeine Java-Themen 7
I Anwendung auf Netzlaufwerk von mehreren Usern gleichzeitig nutzbar. Allgemeine Java-Themen 3
A Garbage Collector in NetBeans vs. exe Anwendung Allgemeine Java-Themen 33
D Java Anwendung mit dll File Allgemeine Java-Themen 5
B JAVA Prozesse in einer eigenen Anwendung laufen lassen Allgemeine Java-Themen 9
D RMI Einfache Chat-Anwendung mit RMI Allgemeine Java-Themen 0
J Jasper ireport - wieso beendet die Anwendung wenn ich die Preview schließe Allgemeine Java-Themen 1
Tort-E Datenmodell / Struktur der Anwendung Allgemeine Java-Themen 4
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
S Anwendung zum ausrechnen der Differenz von zwei Tagen Allgemeine Java-Themen 9
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
L Stack overflow bei einer endrekursiven Funktion (Anwendung: Spezialform des Package Merge) Allgemeine Java-Themen 4
P Anwendung läuft nur mit JDK Allgemeine Java-Themen 2
D Java-Anwendung mit DB, GUI, etc. Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
F Unlimited Strength Policy. Frage Verbreitung der Anwendung Allgemeine Java-Themen 1
T Bot für Mql-Anwendung Allgemeine Java-Themen 10
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
D neuen Prozess starten und anwendung beenden. Allgemeine Java-Themen 3
L Input/Output IO Anwendung Allgemeine Java-Themen 6
M Suche Framework/API für Monitoring-Anwendung Allgemeine Java-Themen 3
M Problem beim Starten der Anwendung Allgemeine Java-Themen 3
C Anwendung läuft nicht auf Mac OS X Allgemeine Java-Themen 2
M Java Anwendung ausführen Allgemeine Java-Themen 5
eskimo328 Swing Client Anwendung für MAC OS (Update Routine) Allgemeine Java-Themen 6
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
J Interpreter-Fehler Anwendung startet nicht Allgemeine Java-Themen 5
W Framework für RichClient Anwendung? Allgemeine Java-Themen 4
D Mini Webserver für GUI Anwendung Allgemeine Java-Themen 5
Ollek MVC - Anwendung auf mein Projekt Allgemeine Java-Themen 18
U (Land-)Karten in Java Anwendung einbinden (GoogleMaps/OpenStreetMap) Allgemeine Java-Themen 7
S "Katalog"-Anwendung in Java eine gute Idee? Allgemeine Java-Themen 12
S Wie eine verteilte Anwendung in die Cloud? Allgemeine Java-Themen 4
E Anwendung nutzt plötzlich nicht mehr 100% CPU Allgemeine Java-Themen 2
R Geht das? JRE 1.4 global, 1.6.20 nur für eine Anwendung? Allgemeine Java-Themen 9
K Anwendung bringt JAVA Speicherfehler Allgemeine Java-Themen 11
C Java Anwendung nur einmalig starten Allgemeine Java-Themen 10
eskimo328 Offline/Online Web-Anwendung, Datensynchronisation etc. Allgemeine Java-Themen 9
E Anwendung starten Allgemeine Java-Themen 3
W Java Anwendung in HTML Allgemeine Java-Themen 2
DEvent Aktuelle Uhrzeit per Anwendung Allgemeine Java-Themen 4
C Idee für Anwendung/ Bücher Allgemeine Java-Themen 8
Y Anwendung starten(JAR) - Entscheidung Konsole oder Swing Allgemeine Java-Themen 5
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
C Kontextmenü erweitern und mit Java Anwendung verknüfen. Allgemeine Java-Themen 3
7 Problem mit webbasierter Anwendung Allgemeine Java-Themen 6
D Java Anwendung in der Shell Allgemeine Java-Themen 5
D Versuch Server - Client anwendung Allgemeine Java-Themen 9
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
M Anwendung des MVC Konzepts Allgemeine Java-Themen 7
R Ausführbare Java Anwendung Allgemeine Java-Themen 27
A Java-Anwendung "richtig" schließen ohne JVM zu beenden Allgemeine Java-Themen 2
B In Anwendung jar file bauen Allgemeine Java-Themen 2
A Webspace für Grails-Anwendung Allgemeine Java-Themen 3
M WebStart Anwendung nicht dauerhaft Cachen Allgemeine Java-Themen 3
A An alle Cracks: Anwendung beenden mit ShutdownHook? Allgemeine Java-Themen 13
D Anwendung startet im Remote Desktop nicht Allgemeine Java-Themen 14
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
M SMS aus Desktop-Anwendung verschicken Allgemeine Java-Themen 8
G Unterschied Enterprise Anwendung und Web Anwendung Allgemeine Java-Themen 30
? Swing Anwendung aus Konsole starten Allgemeine Java-Themen 7
G Weboberfläche für Java Anwendung? Allgemeine Java-Themen 10
Y ProcessBuilder, Prozess wird gestartet, aber Anwendung nicht Allgemeine Java-Themen 5
S jar aus anwendung heraus ausführen Allgemeine Java-Themen 2
J Konsolen Anwendung mit while(true) Allgemeine Java-Themen 6
-MacNuke- Frage zu einer 3-Tier Anwendung Allgemeine Java-Themen 9
M Anwendung nur einmal starten / Zeichen in String zählen Allgemeine Java-Themen 7
F Hilfe beim Starten einer Java Anwendung unter Windows gesuch Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben