-
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
-
Zitat von Rainer Ross
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
-
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.
-
... 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.
-
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.
-
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?
-
Zitat von dschroeder
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/...edis-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
-
Vielen Dank. Werde ich mir mal ansehen.
-
Zitat von dschroeder
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.
In diesem Fall sieht es so aus, dass es einen fertigen Node.js Client gibt https://www.npmjs.com/package/redis der das Event abonniert. Diese Events schreibt man dann in eine DTAQ oder in eine DB2 Tabelle mit Trigger für die weitere Verarbeitung. Auf https://github.com/RainerRoss/Send-S...taFromQueue.js hab ich ein Beispiel für ein Programm das Daten aus einer DTAQ liest, um zu zeigen, dass es nicht sehr kompliziert ist. Wir können auch über das Thema telefonieren.
-
Hallo Rainer,
danke für deine Antwort. Du hast richtig erkannt, dass ich mich auf dem Redis für ein Event abonnieren möchte. Für die meisten gängigen Programmiersprachen (Java, Node.js, ...) gibt es dafür bereits fertige Clients. Ich würde das aber gerne direkt im RPG machen. Du kennst ja den Node.js Code. Bist du der Meinung, dass man das Abonnieren auch im RPG nachbauen kann? Das Schreiben eines Events haben wir ja bereits vor Jahren in RPG gebaut. Ich fürchte, dass das Abonnieren aber komplizierter ist, oder?
Hier mal unser Schreibprogramm für Redis. ist nicht sehr lang, finde ich. Wenn man so etwas für's Lesen hinbekäme, wäre ich am Ziel. Wenn nicht, werden wir es wahrscheinlich mit in RPG eingebettetem Java realisieren.
Code:
*============================================================================================* * Programm-Aufgabe Event an Redis Server schicken *
* Generierung 27.08.2013 *
* Programmierer HIN *
*============================================================================================*
D/COPY LIBHTTP/QRPGLESRC,socket_h
*
*=========================================================================
D translate PR ExtPgm('QDCXLATE')
D Length 5P 0 const
D Data 32766A options(*varsize)
D Table 10A const
*
*=========================================================================
D ecc_ip_addr S 10U 0
D ecc_socket S 10I 0
D ecc_connection S 10I 0
D ecc_sockaddr DS LIKEDS(sockaddr_in)
*
D ecc_cmd S 1000A
D ecc_len S 10I 0
*
D ecc_temp S 100A
D ecc_response S 100A varying
*
D CRLF C x'0d25'
D KlammerAuf C x'c0'
D KlammerZu C x'd0'
*=========================================================================
* Main
*=========================================================================
C *ENTRY PLIST
C PARM P#SCode 3 Steuercode
C PARM host 100
C PARM port 5 0
C PARM topic 100
C PARM data 1000
C PARM response 5 0
C PARM errMsg 100
ecc_ip_addr = inet_addr(%trim(host));
if (ecc_ip_addr = INADDR_NONE);
p_hostent = gethostbyname(%trim(host));
if (p_hostent = *null);
errMsg = 'Host not found!';
else;
ecc_ip_addr = h_addr;
endif;
endif;
ecc_socket = socket(AF_INET:SOCK_STREAM:IPPROTO_IP);
if (ecc_socket = -1);
errMsg = 'Error has occurred during create socket';
endif;
ecc_sockaddr = *allx'00';
ecc_sockaddr.sin_family = AF_INET; // Type of address
ecc_sockaddr.sin_addr = ecc_ip_addr; // IP adress
ecc_sockaddr.sin_port = port; // port number
ecc_connection = connect(ecc_socket
:%addr(ecc_sockaddr)
:%size(ecc_sockaddr));
if (ecc_connection = -1);
errMsg = 'Error has occurred during connect';
endif;
ecc_cmd = '*3' + CRLF
+ '$7' + CRLF + 'PUBLISH' + CRLF
+ '$' + %char(%len(%trim(topic))) + CRLF + %trim(topic) + CRLF
+ '$' + %char(%len(%trim(data ))) + CRLF + %trim(data ) + CRLF;
callp translate(%len(%trimr(ecc_cmd)):ecc_cmd:'QTCPASC');
ecc_len = send(ecc_socket
:%addr(ecc_cmd)
:%len(%trimr(ecc_cmd))
: 0);
if (ecc_len < %len(%trimr(ecc_cmd)));
errMsg = 'Error during send.';
endif;
ecc_len = recv(ecc_socket:%addr(ecc_temp):%size(ecc_temp):0);
if (ecc_len = -1);
errMsg = 'Error during recv.';
else;
ecc_response = %subst(ecc_temp:1:ecc_len);
ecc_len = %len(ecc_response);
ecc_temp = ecc_response;
callp translate(ecc_len:ecc_temp:'QTCPEBC');
ecc_response = %subst(ecc_temp:2:ecc_len - 3);
response = %dec(ecc_response:5:0);
endif;
callp close(ecc_socket);
return;
-
Zitat von dschroeder
Hallo Rainer,
danke für deine Antwort. Du hast richtig erkannt, dass ich mich auf dem Redis für ein Event abonnieren möchte. Für die meisten gängigen Programmiersprachen (Java, Node.js, ...) gibt es dafür bereits fertige Clients. Ich würde das aber gerne direkt im RPG machen. Du kennst ja den Node.js Code. Bist du der Meinung, dass man das Abonnieren auch im RPG nachbauen kann? Das Schreiben eines Events haben wir ja bereits vor Jahren in RPG gebaut. Ich fürchte, dass das Abonnieren aber komplizierter ist, oder?
Hier mal unser Schreibprogramm für Redis. ist nicht sehr lang, finde ich. Wenn man so etwas für's Lesen hinbekäme, wäre ich am Ziel. Wenn nicht, werden wir es wahrscheinlich mit in RPG eingebettetem Java realisieren.
Hallo Dieter,
die Kommunikation mit Redis geht auch bei Node.js über Sockets. Das müsste auch im RPG machbar sein. Das Abonnieren eines Events sollte auch nicht komplizierter sein. Das RPG-Programm ist eine gute Basis dafür.
In Node.js geht, dass es im Programm asynchrone Funktionen gibt, die auf die abonnierten Events lauschen. Da bin ich mir nicht sicher, ob man es mit RPG nachbauen kann.
-
ich habe gerade gesehen, dass redis auch über das "Open Source Package Management" auf der IBM i zur Verfügung steht. Im Moment habe ich gerade leider keine Zeit es auszuprobieren, aber ich finde es sehr interessant, es zu testen.
Similar Threads
-
By RPG_KL in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 30-07-20, 19:04
-
By berg01796 in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 15-11-16, 11:55
-
By Der Gute in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 01-07-02, 11:11
-
By Bärnd in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 29-05-02, 15:58
-
By Andreas Herzfeldt in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 02-07-01, 06:51
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks