Hallo,
Ich habe ein (mehr oder weniger) komplexes Datenmodell im Speicher.
Das Datenmodell ist hierarchisch und umfasst zwischen 150.000 - 300.000 Objekte.
Auf das Datenmodell sollen diverse Module (ca. 7-10) aus verschiedenen Threads zugreifen.
Einige Module ändern in regelmäßigen Abständen (alle 250 ms - 1000 ms) Daten aus dem Modul. Andere ändern nur bei Bedarf und wesentlich seltener. Wieder andere greifen nur lesend zu. Die Datenänderungen sind im allgemeinen wenig zeit intensiv.
Meine Frage: Wie synchronisiere ich ein solches Datenmodell?
Ich habe bisher folgende Ideen:
(1) Über Locks in den einzelnen Typen.
Vorteil: Es werden nur die Daten gelockt, die geändert werden.
Nachteil: Das führt bei der Anzahl von Objekten zu sehr vielen Locks.
(2) Über eine zentrale Schnittstelle, über die alle Module zugreifen. Diese Schnittstelle hätte dann einen zentralen Lock.
Nachteil: Es wird immer alles gelockt, egal was geändert wird.
Vorteil: Nur ein Lock --> wenig Synchronisation-Aufwand.
(2a) Dispatch Thread (ähnlich wie in AWT/Swing):
Ein Thread der nacheinander Aufgaben (Event-Threads) abarbeitet.
Nachteil / Vorteil ähnlich wie (2) + Es werden viele Threads (Events) erzeugt.
Mich würden eure Erfahrungen interessieren.
Welche Lösung bevorzugt ihr (vielleicht eine ganz andere, die ich noch gar nicht bedacht habe)?
Vielen Dank im Voraus
Ich habe ein (mehr oder weniger) komplexes Datenmodell im Speicher.
Das Datenmodell ist hierarchisch und umfasst zwischen 150.000 - 300.000 Objekte.
Auf das Datenmodell sollen diverse Module (ca. 7-10) aus verschiedenen Threads zugreifen.
Einige Module ändern in regelmäßigen Abständen (alle 250 ms - 1000 ms) Daten aus dem Modul. Andere ändern nur bei Bedarf und wesentlich seltener. Wieder andere greifen nur lesend zu. Die Datenänderungen sind im allgemeinen wenig zeit intensiv.
Meine Frage: Wie synchronisiere ich ein solches Datenmodell?
Ich habe bisher folgende Ideen:
(1) Über Locks in den einzelnen Typen.
Vorteil: Es werden nur die Daten gelockt, die geändert werden.
Nachteil: Das führt bei der Anzahl von Objekten zu sehr vielen Locks.
(2) Über eine zentrale Schnittstelle, über die alle Module zugreifen. Diese Schnittstelle hätte dann einen zentralen Lock.
Nachteil: Es wird immer alles gelockt, egal was geändert wird.
Vorteil: Nur ein Lock --> wenig Synchronisation-Aufwand.
(2a) Dispatch Thread (ähnlich wie in AWT/Swing):
Ein Thread der nacheinander Aufgaben (Event-Threads) abarbeitet.
Nachteil / Vorteil ähnlich wie (2) + Es werden viele Threads (Events) erzeugt.
Mich würden eure Erfahrungen interessieren.
Welche Lösung bevorzugt ihr (vielleicht eine ganz andere, die ich noch gar nicht bedacht habe)?
Vielen Dank im Voraus