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
[Erledigt] Synchronisation verschiedener Frontends.
-
- Beiträge: 813
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz 2.2.6
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
[Erledigt] Synchronisation verschiedener Frontends.
Zuletzt geändert von charlytango am Di 14. Mär 2023, 17:27, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 129
- 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.
Eigentlich sollte das die Datenbank intern regeln und du kannst das mit den Transaktionen steuern.
Wenn es keine Zwangstransaktionen gibt.
Wenn es keine Zwangstransaktionen gibt.
just my two Beer
- af0815
- Lazarusforum e. V.
- Beiträge: 6117
- 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.
Du kannst dich einmal mit dem Begriff Multiuser Datenbank herumschlagen
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

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

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).
-
- Beiträge: 813
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz 2.2.6
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Synchronisation verschiedener Frontends.
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
Danke fürs zurechtrücken !

Danke fürs zurechtrücken !