AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen
Thema durchsuchen
Ansicht
Themen-Optionen

Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

Ein Thema von jus · begonnen am 2. Dez 2022 · letzter Beitrag vom 9. Dez 2022
Antwort Antwort
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#1

Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

  Alt 2. Dez 2022, 16:33
Datenbank: MySQL • Version: 5 • Zugriff über: libmysql.dll
Hallo,
ich habe eine grundsätzliche Frage und hätte eure Expertise gewußt. Ich habe eine alte Kassasoftware, die nativ über libmysql.dll direkt auf eine MySQL Datenbank zugreift. Darin gibt es eine Tabelle für Warenkorb, wo die aktuellen Artikeln im Geschäft eingescannt werden. Jetzt möchte ich weitere Instanzen von der Kassaanwendung laufen lassen, die dann mitkriegen, wenn sich der Inhalt der Tabelle ändert, sprich weitere Produkte abgelegt werden, oder gelöscht werden. Eigentlich ist das Problem ja nicht nur auf MySQL bezogen, sondern generell, gibt es von der Datenbankseite Möglichkeiten die Anwendungen zu beachrichtigen, dass sich an der Tabelle was geändert hat, oder muß die Anwendung in periodischen Zeitintervallen in der Datenbank nachschauen, ob sich die Tabelle geändert hat? Wie löst man sowas?

Lg,
jus
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

  Alt 2. Dez 2022, 16:45
MySQL unsterstützt anscheinend Notifications nicht, aber es gibt (Open Source) Implementierungen, die etwas ähnliches bereitstellen. Zum Beispiel diese:

Zitat:
The github project mysql-notification provides a MySQL user defined function MySQLNotification() as a plugin to MySQL that will send notification events via a socket interface. This project includes a sample NodeJS test server that receives the notification events that could be adapted for Java or any other socket service.
https://stackoverflow.com/questions/...ify-equivalent

https://github.com/Cyclonecode/mysql-notification

In dieser UDF wird ein HTTP Server benötigt, der alle Clients benachrichtigt.


Einige Gedanken zu diesem Thema habe ich im Artikel Firebird Database Events and Message-oriented Middleware (part 1) gesammelt.

Darin werden auch Einschränkungen (und Workarounds) beschrieben die sich aus periodischen Abfragen des Servers auf neue Einträge ergeben können.
Michael Justin
habarisoft.com

Geändert von mjustin ( 2. Dez 2022 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

  Alt 5. Dez 2022, 08:46
Wenn man allerdings eine Lösung wie diese mit der UDF, die einen Server benötigt, der die Clients benachrichtigt, da kann man es auch gleich selbst in den Client einbauen. Gibt es eine Änderung, die andere benachrichtigen sollte, einfach diese vom Client anschubsen und die anderen können bestimmte Nachrichten abbonieren. Der Server Prozess entscheidet dann, welcher Client dan die Nachricht erhält.

EDIT: Da fällt mir ein, dass auch die UDF an diesen Server zusätzlich senden kann und Nachrichten durch Trigger bereit stellen kann, die vllt für den Client schwer zu evaluieren sind. Stock Low im Inventar kommt da in den Kopf, wenn man eine Rechnung speichert.

Geändert von MyRealName ( 5. Dez 2022 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

  Alt 5. Dez 2022, 09:44
Ich fände es generell ungünstig, wenn man die Vernetzung einer Anwendung auf der Basis von Datenbanktabellen löst. Die Datenhaltung hat mit der Anwendungslogik nicht viel zu tun, wenn man das sauber trennt. Manche packen bewusst sehr viel Logik in die Datenbank, was z.B. bei Warenwirtschaften auch sinnvoll ist, aber da geht es dann um Datenlogik, nicht um die Kommunikation zwischen verschiedenen Instanzen einer Anwendung.

Selbst wenn es technisch stabil hinzubekommen sein sollte, halte ich das für keine gute Idee.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

  Alt 6. Dez 2022, 19:07
MySQL unsterstützt anscheinend Notifications nicht, aber es gibt (Open Source) Implementierungen, die etwas ähnliches bereitstellen. Zum Beispiel diese:

https://stackoverflow.com/questions/...ify-equivalent

https://github.com/Cyclonecode/mysql-notification

In dieser UDF wird ein HTTP Server benötigt, der alle Clients benachrichtigt.
.............
ah ok, das mit UDF habe ich bisher nicht gekannt. Vielen Dank für den Hinweis und die Links. Da ich in diesem Fall Zugriff auf den MySQL Server habe, werde ich es mir mal anschauen, wie weit ich da komme.

@jaenicke: vielen Dank für den Hinweis, ich gebe zu, dass ich es noch nicht von dieser Seite her daran gedacht habe, aktuell ist es eher noch so eine Machbarkeitsstudie.
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Wie mehrere Anwendungen bei Änderung einer Tabelle benachrichtigen

  Alt 9. Dez 2022, 10:57
Hallo,
wollte noch mal rückmelden, dass die MySQL UDF Sache nun läuft. Für die Leute die sowas ähnliches mal machen möchten, eine kurzes Feedback wie ichs gemacht habe:
Mein Glück ist, dass der MySQL Server auf Windows läuft ist. Darum habe ich einfach mein altes Visusal Studio 2005 angeschmissen und in C eine DLL mit einer Methode gemacht. Folgender Link war sehr hilfreich:
Creating MySQL UDFs with Microsoft Visual C++ Express
Die Methode in der DLL verschickt einfach ein UDP Broadcast über WINSOCKET an einem bestimmten Port im Netzwerk. Diese DLL ins MySQL Serververzeichnis (in meinem Fall ./BIN, bei neueren MySQL Versionen eventuell ein anderes Verzeichnis) kopiert und in SQL mit "CREATE FUNCTION..." die Methode von der DLL einbinden. Dann noch 3 Trigger für INSERT, UPDATE und DELETE in der DB gesetzt und fertig. Die Anwendungen bekommen dann immer was mit, wenn eine Änderung in der Tabelle gemacht wird.


Wenn man allerdings eine Lösung wie diese mit der UDF, die einen Server benötigt, der die Clients benachrichtigt, da kann man es auch gleich selbst in den Client einbauen. Gibt es eine Änderung, die andere benachrichtigen sollte, einfach diese vom Client anschubsen und die anderen können bestimmte Nachrichten abbonieren. ....
@MyRealName: ja, ich gebe dir recht, dass ich die Benachrichtigung über WINSOCK UDP Broadcast im Falle einer Änderung über die eigene Anwendung hätte auch machen können. Aber die Sache mit UDF hat mich hier auch irgendwie gereizt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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