PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Steuerbefehle von php auffangen


tsaG
2011-05-20, 09:33:26
Hi!

Ich habe eine Webseite die Parameter in eine Datenbank einträgt. Nun sollen diese Befehle noch an einen Java Daemon übergeben werden. Nur wie am besten?

Der Java Daemon soll, sofort wenn eine Änderung stattgefunden hat, agieren.

Die Datenbank ständig/alle x sekunden auf änderungen zu durchlaufen fällt flach da a) die Datenbank zu gross ist b) diese Änderung sofort übernommen werden soll.

Nun wie könnte man das lösen? Gibt es eine Funktion in MySQL die bei Änderungen ein Event auslöst welches mit Java aufgefangen werden kann?
Oder wäre es schlau eine eigene Tabelle für änderungen anzulegen in welcher "noch nicht abgearbeitete" Änderungen gespeichert werden? Diese wird dann alle x sekunden vom Server abgerufen... Wobei, dabei wieder unnötige Auslastung/eine Verzögerung entsteht :-/

Hmpf, weiss jemand einen Rat?

AlecWhite
2011-05-20, 10:09:24
Also wenn ich dich richtig verstehe, dann möchtest du jede Änderung, welche durch PHP (und nur durch dieses vorgenommen wird) sofort an einen JAVA-Dienst übergeben.

Je nach Architektur des PHP-Skripts ist das einfacher oder kompliziert. In einer klassischen MVC Architektur, sind die gesamten SQL Befehle ohnehin in den Modelklassen gekapselt. Diese kannst du dann natürlich erweitern: Wenn SQL-erfolgreich ausgeführt, dann führe Request auf Java-Daemon aus.

Also in etwas sowas:


mysql_query($sql);
if(mysql_errno()) {
system($callJava);
}

Wenn jetzt die SQL Anweisung nicht gekapselt sind, musst du natürlich im Skript rumhantieren. SQL selbst bietet nicht die Option an, externe Programme als Callback anzuführen.

tsaG
2011-05-20, 14:50:42
Genau, so in etwa. Schade das SQL das nicht anbietet.

Wie funktioniert die Kommunikation denn zwischen php und Java genau? Über die jeweiligen Ports? Oder wie wird der Datensatz übermittelt?

AlecWhite
2011-05-20, 16:18:03
Die Dienst wird ja irgendwo eine Schnittstelle anbieten, oder?

PatkIllA
2011-05-20, 16:29:02
SQL selbst bietet nicht die Option an, externe Programme als Callback anzuführen.MySQL kann aber wohl per "User defined Functions" Programme aufrufen.
Die Datenbank ständig/alle x sekunden auf änderungen zu durchlaufen fällt flach da a) die Datenbank zu gross ist b) diese Änderung sofort übernommen werden soll.
Die Abfrage von größeren Datenbanken sollte bei richtiger Administration kaum länger dauern. Definiere sofort? Wirkliches "Sofort" geht nicht, da alles Zeit in Anspruch nimmt. Irgenwelche strengen oder weichen Echtzeitanforderungen? Oder machst du was, was eigentlich als ein Schritt in einer Transaktion abgearbeitet werden müsste?

AlecWhite
2011-05-20, 17:23:19
Was der TE meint ist aber keine UDF, sondern ein call über einen socket auf einen anderen Systemprozess und das kann mySQL nicht :)

PatkIllA
2011-05-20, 17:26:34
Was der TE meint ist aber keine UDF, sondern ein call über einen socket auf einen anderen Systemprozess und das kann mySQL nicht :)
Ich hab das so verstanden, dass man da beliebige Funktionen in beliebigen Bibliothen machen kann.

Gast
2011-05-23, 22:36:11
Andere Möglichkeit könnte Drizzle mit RabbitMQ sein.

http://developian.blogspot.com/2011/04/visualizing-data-in-real-time-using.html