Anmelden

View Full Version : Lesender Zugriff auf Redis per RPG



Seiten : 1 [2] 3

ExAzubi
14-04-21, 10:00
Warum kapselst du nicht Dieter's Lösung in ein eigens PGM und ließt (rufst) das PGM als SPECIAL Datei auf. Dann sollte doch alles so sein wie gewünscht...

dschroeder
14-04-21, 12:58
Danke für deine Anwort.
Aber wie ich schon sagte, ist das Installieren einer größeren Software nur eine Option, wenn wir keine einfachere Möglichkeit finden. Dieter Benders Lösung läuft ja letztendlich auch darauf hinaus, dass wir den Redis mittels Java ansprechen. Das könnten wir auch machen, indem wir eine Java-Klasse in RPGLE embedden. Das würde für uns weniger "fremde" Software bedeuten. Ist auch nicht schön, da in dem RPG Job dann immer eine VM hochgezogen wird. Aber das wäre in unserem Fall nicht tragisch, da der Job sowieso als Batch-Job den ganzen Tag über laufen wird.

Aber noch lieber wäre mir eben eine Lösung, die nativ mit RPG auskommt oder auch mit SQL. Aber das scheint es ja nicht zu geben bzw. das wohl noch niemand aus dem Forum programmiert.

Dieter

Rainer Ross
14-04-21, 13:36
Hallo Dieter,

ich hatte mal die Aufgabe die Cloud Datenbank "Cloudant" der IBM anzuprogrammieren. Hier werden für alle Datenbankfunktionen Webservices zur Verfügung gestellt. Ich denke, dass es für Redis ähnlich sein sollte.

Diese Funktionen teste ich mit Google Postman und implementiere sie dann mit den SQL-Funktionen HTTPGETCLOB oder HTTPPOSTCLOB. Das funktioniert sehr gut und ist sehr performant.

Rainer

BenderD
14-04-21, 14:57
Hallo Dieter,

ich hatte mal die Aufgabe die Cloud Datenbank "Cloudant" der IBM anzuprogrammieren. Hier werden für alle Datenbankfunktionen Webservices zur Verfügung gestellt. Ich denke, dass es für Redis ähnlich sein sollte.

Diese Funktionen teste ich mit Google Postman und implementiere sie dann mit den SQL-Funktionen HTTPGETCLOB oder HTTPPOSTCLOB. Das funktioniert sehr gut und ist sehr performant.

Rainer

... das mit der Performance wage ich zu bezweifeln (oder ich habe eine andere Vorstellung von sehr performant). Die Implementierung ist Java und fährt eine JVM im aufrufenden Job hoch. Funktioniert sehr gut: nur solange, wie man in dem Job nicht selber was mit Java machen will. Das sind doch mit heißer Nadel gestrickte Krücken, von denen ich abraten würde.

D*B

Andreas_Prouza
14-04-21, 15:23
Bei zeitkritischen Prozessen sollte man hier den Weg über vorgestartete Jobs die via Data Queue angesteuert werden nachdenken.
Dann fällt das Problem mit der gestarteten JVM weg, da dies dann nur 1 mal für den vorgestarteten Job gemacht wird.
Funktioniert prima.
Auch synchron wenn gewünscht mit Rückantwort.

BenderD
14-04-21, 15:38
... redis ist eine Art cache von Parametern, eingesetzt als schnellere Alternative zur Datenbank; da würde ich die Anzahl der Layer klein halten, da wäre mir Webservice via Java und SQL schon fragwürdig.

dschroeder
14-04-21, 16:02
Ich habe auch gelesen, dass Redis als Cache Unterstützung verwendet werden kann. Bei uns haben wir aber einen anderen Einsatzzweck: Wir nutzen Redis als Message System für Events. Wenn z.B. in einer (nicht auf der i laufenden) Java Anwendung ein neuer Datensatz angelegt wird, sendet die Java Anwendung per Redis ein entsprechendes Ereignis. Jede andere Anwendung, die sich auf genau dieses Ereignis abonniert hat, weiß dann, das es neue Daten gibt und dass diese (per Webservice) vom anderen System geholt werden können.
Das heißt, Geschwindigkeit ist gar nicht so entscheidend in unserem Fall.

dschroeder
14-04-21, 16:12
Hallo Rainer. Ich habe bei einem Java Kollegen mal gefragt, ob Redis auch ein Webservice Provider ist. Er meinte, dass es das für Ereignisse nicht gibt (oder er hielt es für eine schlechte Lösung, da bin ich mir nicht so sicher).
Was wir letztlich brauchen, ist ein Listener, der den Redis Server abhört und reagiert, sobald ein interessantes Ereignis auftaucht. Mit einem Webservice erscheint mir das gefühlt etwas ressourcenkritisch. Ich müsste den Webservice ja 1 mal pro Sekunde aufrufen oder so.

Vielleicht gibt es aber auch einen "Listener-Webservice", der ressourcenschonend solange wartet, bis ein Ereignis geliefert wird.

Ich habe eine IBM Website gefunden (https://www.ibm.com/de-de/cloud/databases-for-redis), in der von Redis und Cloud Databases gesprochen wird. Da steht unter "zugehörige Produkte" IBM-Cloudant und IBM Cloud Databases for PostgreSQL. Ich verstehe da den Zusammenhang nicht: Muss ich erst eine IBM Cloudlösung mieten, damit ich die Redis Zugriffsfunktionen nutzen kann?

BenderD
15-04-21, 06:34
Ich habe auch gelesen, dass Redis als Cache Unterstützung verwendet werden kann. Bei uns haben wir aber einen anderen Einsatzzweck: Wir nutzen Redis als Message System für Events. Wenn z.B. in einer (nicht auf der i laufenden) Java Anwendung ein neuer Datensatz angelegt wird, sendet die Java Anwendung per Redis ein entsprechendes Ereignis. Jede andere Anwendung, die sich auf genau dieses Ereignis abonniert hat, weiß dann, das es neue Daten gibt und dass diese (per Webservice) vom anderen System geholt werden können.
Das heißt, Geschwindigkeit ist gar nicht so entscheidend in unserem Fall.

... seltsames Design, wer lässt sich denn sowas einfallen, wo es doch messanger systeme genug gibt, open source und auch von IBM, wenn man mehr Geld für weniger Support bezahlen will. Wie auch immer, gibt es immer Lösungen, die krumme Wege wieder zum Ziel leiten.
Vielleicht findest Du ja hier was:
https://stackoverflow.com/questions/9475547/how-to-implement-trigger-for-redis-datastore
Weiterreichen kann man das event dann über MQ-series, einen anderen messanger oder in eine DB2 Tabelle auf der as400 schreiben, die dann per Trigger synchron reagiert.

D*B

dschroeder
15-04-21, 07:55
Vielen Dank. Werde ich mir mal ansehen.