Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird - Client bei Änderung informieren (https://www.delphipraxis.net/171147-firebird-client-bei-aenderung-informieren.html)

Nersgatt 23. Okt 2012 10:29

Datenbank: Firebird • Version: 2.5 • Zugriff über: dbx

Firebird - Client bei Änderung informieren
 
Moin,

ich suche eine Lösung für folgendes Problem:
Ich habe Geräte, die eine Statusinformation periodisch in eine Datenbank schreiben.

Nun habe ich einen Client (der auf einem anderen PC läuft), der diese Informationen auf einem Statusbildschirm anzeigt. Dort rufe ich periodisch diese Information ab und stelle sie auf dem Bildschirm dar. Das hat für mich mehrere Probleme:
  1. Netzwerktraffic. Ich muss die Datebank ständig abfragen um zu ermitteln, ob sich die Information geändert hat und diese ggf. darstellen
  2. aus 1. resultiert natürlich Arbeit für die Datenbank, selbst wenn sich die Information nicht geändert hat
  3. Die Informationen werden verzögert dargestellt. Polle ich die Datenbank z.B. alle 30 Sekunden, dann sind die dargestellten Informationen ggf. 30 Sekunden alt. Polle ich alle 2 Sekunden, bekomm ich mit Punkt 1 und 2 Probleme, weil der Traffic ansteigt.
Ich würde mir wünschen, dass ich mich als Client an der Datenbank anmelden kann und irgendwie einen Callback bekomme, wenn sich die Information ändert (vielleicht ausgelöst durch einen Datenbanktrigger). Ich stelle mir das wie einen Observer für die Datenbank vor.
Es kann auch sein, dass der Statusbildschirm an mehr als einem PC gleichzeitig gestartet wird. Es müssten also x Observer möglich sein.

Gibt es sowas in der Art? Oder wie könnte man das Problem sonst lösen?

Lemmy 23. Okt 2012 10:34

AW: Firebird - Client bei Änderung informieren
 
hi,

das nennt sich Event. Hier mal ein kleiner Einstig: http://www.firebirdsql.org/file/docu...ird_events.pdf

mkinzler 23. Okt 2012 10:35

AW: Firebird - Client bei Änderung informieren
 
Firebird Events

mjustin 23. Okt 2012 11:07

AW: Firebird - Client bei Änderung informieren
 
Zitat:

Zitat von Nersgatt (Beitrag 1187989)

Gibt es sowas in der Art? Oder wie könnte man das Problem sonst lösen?

Je nach Größe des Gesamtsystems und weiteren Anforderungen ist eine Alternative der Einsatz eines Message Brokers. Er wird auf dem Server installiert und erfährt von den Clients, wenn diese eine Änderung in der Datenbank vornehmen, und benachrichtigt alle interessierten Clients unmittelbar von dieser Änderung (Push statt Pull).

Der Datenbankserver kann damit von Benachrichtigungslogik und Tabellen etc. frei bleiben, und man kann auch fortgeschrittene Anforderungen erfüllen - zum Beispiel solche Clients benachrichtigen, die sich erst nach Eintreten eines Ereignisses verbinden, oder serverseitige Filterung für Clients, die nur bestimmte Nachrichtentypen sehen wollen/sollen.

Es gibt für Delphi / Free Pascal einige Produkte, auch als Open Source, die auch für produktiven Einsatz stabil genug sind.

Viele Grüße

Lemmy 23. Okt 2012 11:21

AW: Firebird - Client bei Änderung informieren
 
Hallo Michael,

Zitat:

Zitat von mjustin (Beitrag 1187998)
Es gibt für Delphi / Free Pascal einige Produkte, auch als Open Source, die auch für produktiven Einsatz stabil genug sind.

nur aus Interesse: kannst Du da vielleicht noch ein, zwei Produkte nennen?

Grüße

Nersgatt 23. Okt 2012 11:34

AW: Firebird - Client bei Änderung informieren
 
Prinzipielle klingen die Firebirdevents nach genau dem, was ich brauche. Nur scheinbar wird das nicht von DBExpress unterstützt. Und daran bin ich leider gebunden.
Mal sehen, ob ich dafür eine Lösung finde.

mjustin 23. Okt 2012 14:18

AW: Firebird - Client bei Änderung informieren
 
Zitat:

Zitat von Lemmy (Beitrag 1188000)
Hallo Michael,

Zitat:

Zitat von mjustin (Beitrag 1187998)
Es gibt für Delphi / Free Pascal einige Produkte, auch als Open Source, die auch für produktiven Einsatz stabil genug sind.

nur aus Interesse: kannst Du da vielleicht noch ein, zwei Produkte nennen?

Gerne! - Diese Open Source Message Broker können über diverse Protokolle aus Delphi und Free Pascal heraus angesprochen werden:

* Apache ActiveMQ / Apache Apollo
* HornetQ
* Open MQ
* RabbitMQ


Hinter den Open Source Projekten stehen bekannte Unternehmen wie Oracle, Red Hat, und VMWare, von denen auch kommerzieller Support angeboten wird. Die Projekte haben aber auch sehr aktive Communities in der Open Source Version.

Eines der Protokolle ist STOMP, auf meiner Webseite befinden sich Bibliotheken, die ich seit 2008 entwickle, und die dieses Protokoll verwenden.

Das Thema gab es auch schon mal früher hier:

Client/Server Projekt: Daten filtern und verteilen???


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz