[Erledigt] Synchronisation verschiedener Frontends.

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

[Erledigt] Synchronisation verschiedener Frontends.

Beitrag von charlytango »

Hi,

im Moment ist das noch eine akademische Frage ohne Dringlichkeit, wiewohl sie immer wieder in meinem Kopf für ein neues Projekt rumspukt.

Gegeben wären ein oder mehrere Applikationen auf dem gleichen Rechner (bzw auch mehrere Instanzen der gleichen Applikation) die nebeneinander laufen.

Alle Applikationen arbeiten in eine gemeinsame Datenbank (MySQL, MariaDB)

Wie halte ich die (angezeigten) Daten zwischen den verschedenen laufenden Applikationen synchron.
Sagen wir mal ich ändere einen Datensatz mit App_A und in App_B wird der gleichzeitig gar nicht angezeigt/benutzt -- alles safe.

Wird der Datensatz aber benutzt zeige ich in App_B gerade etwas falsches an.

Man könnte nun einfach beim Wechseln zwischen den Applikationen alle angezeigten Daten automatisch aktualisieren. Was bei einem Mengengerüst von 10-20tsd Records tempomäßig machbar scheint.

Frage: Gibt es für das Problem eine elegantere Lösung?

Zusätzlich ist da noch die Frage des Lockings. Da denke ich eher an ein logisches Locking und würde PrimaryKeys in eine Tabelle "Locking" eintragen Aber elegant ist das auch nicht.


THX
Zuletzt geändert von charlytango am Di 14. Mär 2023, 17:27, insgesamt 1-mal geändert.

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Synchronisation verschiedener Frontends.

Beitrag von Joh »

Eigentlich sollte das die Datenbank intern regeln und du kannst das mit den Transaktionen steuern.

Wenn es keine Zwangstransaktionen gibt.
just my two Beer

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6212
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Synchronisation verschiedener Frontends.

Beitrag von af0815 »

Du kannst dich einmal mit dem Begriff Multiuser Datenbank herumschlagen :D

Wie Joh schon angedeutet hat, hängt sehr viel von der DB und dem Sperr- und Transaktionsmanagment ab. Dieses Verhalten kann oft am Server in der jeweiligen DB genauer spezifiziert werden. Damit wird auch festgelegt, wie lesende Zugriffe während einer Sperrung aufgrund einer laufenden Transaktion abgehandelt wird. Das geht von Leseverweigern bis hin, zu Zustand liefern der vor der Transaktion gegolten hat.

Ein Problem ist , das du, wie schon angemerkt nicht direkt Informiert wirst, was sich geändert hat. Es gibt (bis auf ganz wenige Ausnahmen) keinen Callback der DB bei Änderungen. Daher sollte die Daten so wenige wie möglich sein und wenn du mehrere zehntausend Datensätze gepuffert hast, würde ich dringend das Design überlegen. Eine Möglichkeit ist, in eine eigene Statustabelle einen Zeitstempel einzutragen, wenn Daten geändert wurden. Das geht von der Applikation aus oder am Server direkt. Damit kann man mit einer einfachen Abfrage von ganz wenigen Daten herausbekommen, ob sich etwas geändert hat. Das kann man leichter Pollen. Man muss sich aber für Änderungen überlegen, wie man dann mit Konflikten umgeht und der Tatsache das der Letzte gewinnt. Mit viel Erfahrung ist es kein großes Problem :-) und man muss sich das Design wirklich stabil überlegen, auch auf die Spezialitäten der verschiedenen Datenbankserver ist Rücksicht zu nehmen.

Ein gerne verwendetes Beispiel (in englisch) ist hier zu finden: https://stackoverflow.com/questions/649 ... ltaneously
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Synchronisation verschiedener Frontends.

Beitrag von charlytango »

Im Wesentlichen ist mir das ja eh bekannt. War die letzten Tage fiebrig und irgend ein Teufel hat mich wohl geritten und die Hoffnung genährt, ich würde aus der Situation einfacher raus kommen :roll:

Danke fürs zurechtrücken !

Antworten