Mit Trigger Meldung an externe Applikation senden?
Mit Trigger Meldung an externe Applikation senden?
am 13.06.2006 11:31:26 von spam
Kurz zur Situation: Ich habe ein BDE-System (ca. 40 Clients) , bei dem
ein MySQL-Server quasi Proxy für den Oracle-Server des
Warenwirtschaftssystems einer Druckerei spielt. Eine externe Applikation
pollt zur Zeit permanent eine MySQL-Tabelle, holt dort von den
BDE-Clients abgelegte SQL-Statements raus, sendet die zum Oracle-Server,
der sie ausführt. Die Antworten werden wieder in einer anderen
MySQL-Tabelle abgelegt, wo sie von den BDE-Clients abgeholt werden. Ich
habe Zykluszeiten von ca. 0,03 s. Das ist für den Zweck absolut ok.
Das Ganze wurde gemacht, weil so nur eine Oracle-Lizenz verbraucht wird,
einfacher ein Backup-System etabliert werden kann und in Zukunft noch
andere Daten transportiert werden sollen, die Nichts mit dem
Oracle-Server zu tun haben.
Nun finde ich "Polling" eigentlich "böse", irgendwie wenig "stylish".
Gibt es irgend eine Möglichkeit über einen Trigger ein Signal an die
externe Applikation zu senden, per DDE oder TCP oder was auch immer?
Frank
Re: Mit Trigger Meldung an externe Applikation senden?
am 13.06.2006 11:43:27 von Christian Kirsch
Frank Esselbach schrieb:
> Kurz zur Situation: Ich habe ein BDE-System (ca. 40 Clients) , bei dem
> ein MySQL-Server quasi Proxy für den Oracle-Server des
> Warenwirtschaftssystems einer Druckerei spielt. Eine externe Applikation
> pollt zur Zeit permanent eine MySQL-Tabelle, holt dort von den
> BDE-Clients abgelegte SQL-Statements raus, sendet die zum Oracle-Server,
> der sie ausführt. Die Antworten werden wieder in einer anderen
> MySQL-Tabelle abgelegt, wo sie von den BDE-Clients abgeholt werden. Ich
> habe Zykluszeiten von ca. 0,03 s. Das ist für den Zweck absolut ok.
>
> Das Ganze wurde gemacht, weil so nur eine Oracle-Lizenz verbraucht wird,
> einfacher ein Backup-System etabliert werden kann und in Zukunft noch
> andere Daten transportiert werden sollen, die Nichts mit dem
> Oracle-Server zu tun haben.
>
> Nun finde ich "Polling" eigentlich "böse", irgendwie wenig "stylish".
> Gibt es irgend eine Möglichkeit über einen Trigger ein Signal an die
> externe Applikation zu senden, per DDE oder TCP oder was auch immer?
>
M.W. nur über den Umweg der 'User Defined Function'. Ich bin mir
allerdings nicht sicher, wie da die Sicherheitsimplikationen aussehen.
Grob gesprochen, könnte es so aussehen:
- Du schreibst Dir eine UDF in C/C++ (näheres dazu sollte im
MySQL-Handbuch stehen), die dann per system o.ä. das Nötige tut
(allerdings könnte das eine ziemliche Performance-Bremse werden).
- Dein Trigger ruft nun diese UDF mit geeigneten Parametern auf.
Wesentlich hübscher als Polling kann ich das nicht finden :-(
Re: Mit Trigger Meldung an externe Applikation senden?
am 13.06.2006 11:55:56 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Mit Trigger Meldung an externe Applikation senden?
am 13.06.2006 12:16:55 von Harald Stowasser
Frank Esselbach schrieb:
> Kurz zur Situation: Ich habe ein BDE-System (ca. 40 Clients) , bei dem
> ein MySQL-Server quasi Proxy für den Oracle-Server des
> Warenwirtschaftssystems einer Druckerei spielt.
BDE = Betriebsdatenerfassung || Borland Database Engine
> Eine externe Applikation
> pollt zur Zeit permanent eine MySQL-Tabelle, holt dort von den
> BDE-Clients abgelegte SQL-Statements raus, sendet die zum Oracle-Server,
> der sie ausführt. Die Antworten werden wieder in einer anderen
> MySQL-Tabelle abgelegt, wo sie von den BDE-Clients abgeholt werden. Ich
> habe Zykluszeiten von ca. 0,03 s. Das ist für den Zweck absolut ok.
>
> Das Ganze wurde gemacht, weil so nur eine Oracle-Lizenz verbraucht wird,
> einfacher ein Backup-System etabliert werden kann und in Zukunft noch
> andere Daten transportiert werden sollen, die Nichts mit dem
> Oracle-Server zu tun haben.
>
> Nun finde ich "Polling" eigentlich "böse", irgendwie wenig "stylish".
> Gibt es irgend eine Möglichkeit über einen Trigger ein Signal an die
> externe Applikation zu senden, per DDE oder TCP oder was auch immer?
Ich wüsste nicht wie. Und in Umgebungen die ein Connection-Pooling
durchführen auch gar nicht möglich.
Ich würde in deinem Fall ganz auf MySQL als Proxy verzichten und eine
3-Tier[1] Anwendung bauen.
Backend <-> Middletier <-> Frontend
Das hat viele Vorteile:
*Bei geeignetem Protokoll zwischen Middletier und Frontend (CORBA[2],
ActiceX, XMLRPC, Webservices ...) Kannst du elegant Nachrichten hin und
her schicken.
*Du kannst so MVC[3] Designs entwerfen.
*Du kannst Benutzerrechte feiner granulieren (ACL oder sowas
implementieren).
*Bei vielen Wartungsvorgängen musst du nur die (einmal vorhandene)
middletier austauschen. Deine 40-Clients müssen eventuell nicht neu
verteilt werden.
*Kleinere Frontends.
*Meist reduziert sich der Trafik im Netz.
....
[1]http://de.wikipedia.org/wiki/Three-Tier-Architektur
[2]http://de.wikipedia.org/wiki/CORBA
[3]http://de.wikipedia.org/wiki/MVC
Re: Mit Trigger Meldung an externe Applikation senden?
am 13.06.2006 12:19:25 von Christian Kirsch
Andreas Kretschmer schrieb:
> begin Christian Kirsch schrieb:
>>> Nun finde ich "Polling" eigentlich "böse", irgendwie wenig
>>> "stylish". Gibt es irgend eine Möglichkeit über einen Trigger
>>> ein Signal an die externe Applikation zu senden, per DDE oder
>>> TCP oder was auch immer?
>>>
>> M.W. nur über den Umweg der 'User Defined Function'. Ich bin mir
>> allerdings nicht sicher, wie da die Sicherheitsimplikationen
>> aussehen. Grob gesprochen, könnte es so aussehen:
>
> Gibt es keinen zu
> http://www.postgresql.org/docs/8.1/interactive/sql-notify.ht ml
> ähnlichen Mechanismus?
>
Meines Wissens nicht. Nach Lektüre des Texts sehe ich da aber auch
nicht wirklich den großen Vorteil (Das Beispiel ist da übrigens nicht
wirklich hilfreich - das liegt auf dem Niveau von "Drücken Sie
Abbrechen, wenn Sie Abbrechen wollen").
Wenn ich es richtig verstehe, musst Du eine Applikation
(Perl/Shell-Skript?) schreiben, die sich mit LISTEN anmeldet, und dann
weckst Du die mit einem NOTIFY in einem Trigger wieder auf? Bzw.:
> The method a client application must use to detect notification
> events depends on which PostgreSQL application programming
> interface it uses. With the libpq library, the application issues
> LISTEN as an ordinary SQL command, and then must periodically call
> the function PQnotifies to find out whether any notification events
> have been received.
Das sieht für mich jetzt nicht so anders aus, als einfach zu pollen.
Ich vermute, der OP sucht sowas wie "system" für Datenbanken. Oracle
kann das auf verschiedene Art machen:
http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DIS PLAYID:16212348050
http://www.experts-exchange.com/Databases/Oracle/Q_21165304. html
aber wirklich 'eingebaut' scheint nix davon zu sein.
Re: Mit Trigger Meldung an externe Applikation senden?
am 13.06.2006 12:41:07 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de