[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.102

    Wie implementieren andere Firmen ihre SQL-Zugriffe auf die iSeries?

    Hallo,
    wir haben bei uns im Unternehmen 2 Programmierwelten: Die iSeries Programmierung und die PC-Programmierung. Die iSeries ist für alle das zentrale Datenbanksystem. Die PC-Programmierung arbeitet in Java und greift mit SQL auf die Daten der iSeries zu. Die PC-Anwendungen halten dazu eine oder mehrere SQL-Verbindungen (QZDASOINIT) offen. Das führt dazu, dass bei uns meistens mehr als 2000 SQL-Verbindungen, also QZDASOINIT-Jobs, gleichzeitig aktiv sind. (Das heißt natürlich nicht, dass die auch immer gleichzeitig Daten abfordern). Aber trotzdem: Ein erfahrener Berater meinte, es sei sehr außergewöhnlich, dass bei uns so viele SQL-Jobs aktiv sind.
    Meine Frage ist: Ist das wirklich so außergewöhnlich? Es gibt doch bestimmt viele Firmen, die PC-Programme einsetzen und die iSeries als Datenbank einsetzen, oder nicht? Wenn ja, wie wird denn da die Verbindung implementiert? Es gibt ja auch Gateway-Produkte wie db2Connect von IBM. Wir haben bisher keinerlei Notwendigkeit gesehen, uns mit so etwas zu beschäftigen. Aber man weiß ja nie: Vielleicht hat das ja große Vorteile. Kann jemand etwas dazu sagen? Bisher stehen wir auf dem Standpunkt: Je weniger Software dazwischen ist, um so besser.

    Dieter

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Wenn mehr als 2000 Verbindungen offen sind, heißt das denn, dass auch tatsächlich 2000 Clients aktiv sind?
    Gerade Java/.NET arbeiten eigentlich eher im Offline-Modus.
    Die Daten werden in ein Resultset geladen, anschließend wird die Verbindung nicht mehr benötigt und sollte geschlossen werden (was bei vernünfiger Programmierung automatisch passiert).
    Nun wird die Verbindung tatsächlich nicht sofort geschlossen sondern in den Connectionpool gestellt (kann man auch abschalten), so dass die Verbindung das nächste mal wiederverwendet wird.
    Wenn also weniger Clients an der Maschine hängen als offene Verbindungen vorliegen (schu mal bei NETSTAT nach den IP's) ist das ganz einfach schlampig programmiert.
    Es wird nicht aufgeräumt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ...üblich (und notwendig) ist der Einsatz eines Connection Pools oder eines ORM Frameworks. Hier haben sich wieder mal RPG und/oder COBOL Programmierer an Java versucht.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Vielen Dank für die Anworten.

    @D*B: Nein, es haben sich definitiv keine RPG- oder COBOL-Programmierer an Java versucht. Unsere Java-Entwickler kommen aus der Java-Welt und haben da auch langjährige Erfahrungen.

    @Baldur: Ich habe deine Hinweise mit einem Java-Entwickler besprochen: Die einzelnen Java-Applikationen auf einem PC benutzen Connection Pools. Es scheint aber so zu sein, dass trotzdem mindestens eine Verbindung pro PC offenbleibt. Das ist aus Geschwindigkeitsgründen von den Java-Kollegen so gewollt. Das Neuaufbauen einer Verbindung dauert sonst wohl relativ lange. Die Java-Kollegen werden aber aufgrund deiner Hinweise ihre Codes nochmal daraufhin untersuchen, ob es Verbindungen gibt, die vielleicht wirklich geschlossen werden können. Wir haben im Moment den Verdacht, dass außer der absichtlich offengelassenen Verbindung noch weitere Verbindungen länger als notwendig offen bleiben.

    Eigentlich haben wir keine gravierenden Performance-Probleme im Bereich der SQL-Verbindungen. Es hat uns nur gewundert, dass ein externer Berater meinte, er kennen keinen anderen Kunden, bei dem soviele SQL-Jobs (QZDASOINIT) laufen. Ich denke, dass wir mit unseren vielliecht 1000 Usern doch noch lange nicht zu den größten iSeries Anwendern gehören, oder? Unsere Maschinengröße (zur Zeit eine 720) ist doch noch im unteren Bereich der iSeries angesiedelt. Es muss doch auch Firmen geben, die die ganz großen Maschinen kaufen. Die haben dann doch sicherlich noch viel mehr User.

    Nochmals vielen Dank.

    Dieter

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Hallo Dieter,

    ich finde das auch eine sehr interessante Frage, da wir zur Zeit auch vor diesem Problem stehen. Wir haben eine Java-Applikation, die sich Daten von der AS/400 zieht und hier haben wir auch pro Client einen QZDASOINIT-Job offen, was mittlerweile bei mehreren Hundert Clients auch mehrere Hundert Verbindungen sind.
    Die Verwendung eines "externen" Connection Pools scheint mir hier aus Performance-Gründen wenig sinnvoll. Dann kann ich ja gleich die Verbindung beenden und bei Bedarf wieder neu herstellen. Und ein lokaler Connection Pool bedeutet ja eine Verbindung pro Client.

    Ich würde da schon gerne wissen wie es Herr D*B genau meint mit den Connection Pools. Es ist nicht gerade sehr konstruktiv einfach nur ein paar Begriffe in dem Raum zu werfen, denn die Implementierung kann ja unterschiedlich aussehen.

    Gruß,
    KM

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... 2000 Datenbank Connections ist in jedem Fall nicht das, was man hier Java seitig macht, da gibt es kein vertun!
    Wenn ich hundert(e) Clients habe, von denen jeder an die Datenbank verbindet, dann liegt der Fehler schon eins vorher; dann brauche ich einen Application Server, der EJBs (Enterprise Java Beans) unterstützt, verbinde meinen Client an diesen EJB Server und der verbindet über einen Connection Pool an die Datenbank meines Vertrauens. Dann kümmert sich der Pool um die Gesundheit der Connections und temporäre Zugriffspfade etc. werden auf Verbindungsebene gecached etc.
    Noch mehr Nutzen bekomme ich, wenn ich ein ORM Framework (Hibernate oder ähnliches) verwende, dann werden auch häufig benutzte Daten automatisch gecached und ich kann konfigurieren welche Daten ich mit welcher Ladestrategie ziehen lasse, was Lesezugriffe entscheidend optimiert.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Hallo KM,

    ich finde es schon mal gut, dass wir nicht die einzigen sind, die mit hunderten von Clients mit Java-Applikationen auf die iSeries zugreifen. Deshalb erstmal vielen Dank für deine Anwort. Wie ich bereits sagte, haben wir kein direktes Problem. Nur sagte der Performance-Berater, dass er das so noch nicht gesehen hätte. Wenn es Probleme mit zu vielen Verbindungen gibt, könnte man über Connection Tools wie db2Connect oder MQSeries nachdenken. Er würde uns das aber im Moment nicht empfehlen, da ja bei uns alles funktioniert und der Einsatz solcher Tools Änderungen an den Programmen erfordern würde.
    Unsere Java Kollegen setzen übrigens bestimmte Frameworks wie Hibernate ein (ich glaube, im Moment wird aber noch ein anderes Framework als Hibernate verwendert).
    Wir gehen im Moment davon aus, dass eine direkte Verbindung zwischen Client und iSeries die schnellste Möglichkeit ist, Daten zu holen. Jeder dazwischengeschaltete Gateway-Server kann doch die Latenz- und Verarbeitungszeit nur verlängern, oder?

    Gruß,
    Dieter

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Zitat Zitat von dschroeder Beitrag anzeigen
    Nur sagte der Performance-Berater, dass er das so noch nicht gesehen hätte.
    Der scheint wohl noch nicht viel gesehen zu haben.

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von dschroeder Beitrag anzeigen
    Wir gehen im Moment davon aus, dass eine direkte Verbindung zwischen Client und iSeries die schnellste Möglichkeit ist, Daten zu holen. Jeder dazwischengeschaltete Gateway-Server kann doch die Latenz- und Verarbeitungszeit nur verlängern, oder?

    Gruß,
    Dieter
    ... das ist nicht so, da mit einem AppServer nur noch die Daten zum Client gehen brauchen, die angezeigt werden, bzw. die vom Benutzer eingegeben wurden. Die Masse der Daten, die in der Businesslogik zum prüfen etc. gebraucht werden, werden auf dem AppServer gehalten und der gemeinsame Teil dessen braucht dann auch nicht per Client gehalten werden. Außerdem vereinfacht sich die Transaktionslogik, da diese vom AppServer geregelt wird.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nun ja, wenn ihr 1000 Clients habt, so ist es nur klar, dass es auch mindestens 1000 Verbindungen gibt.
    Ein ConnectionPool ist natürlich je Client bzw. wie oben beschrieben mit einem ZwischenServer vorhanden.
    Wenn ein Client nun mehr als eine Verbindung benötigt so kann es durchaus Sinn machen.
    Dies kommt auf die Art der Anwendung an, ob z.b. für Lesen und Update/Insert getrennte Verbindungen verwendet werden.
    Dies liegt auch z.B. an der Journalisierung, denn ein Rollback setzt auch einen aktuellen Cursor zurück.
    Da ich den Cursor in JDBC/ODBC nicht wie bei embedded SQL in HLL's auf der AS/400 "with hold" deklarieren kann benötige ich in diesem Fall 2 Verbindungen.
    Allerdings kann das wiederum entfallen, wenn man mit Resultsets (also vollständig geladenen Daten) und nicht mit dem Reader arbeitet.
    Die 2. Verbindung kann ja nach Transaktionsende doch geschlossen werden.
    Dies kann man über die "ConnectionPoolSize=1" (oder ähnlich) einstellen.

    Jetzt kommt es noch auf die Anmeldesteuerung an.
    Steht iSeries-Navigator Verbindungseigenschaften "Immer anmelden" auf ein, so ist jedes mal eine Anmeldung erforderlich, wenn ein Verbindung geöffnet wird und im Programm User/Password weggelassen wird. Dies ist natürlich lässtig.
    Aber man sollte ja sowieso mit einem APP-User arbeiten.

    Vielleicht kann man den ConnectionPool auch mit einem "Unused Timeout" generieren, so dass nach einiger Zeit die Verbindung geschlossen wird.
    Ich habe z.B. in meiner ODBC-Anwendung das System-Pooling abgestellt.
    Durch Bereitstellung eines eigenen Connection-Pools wird bei jedem Zugriff auf ein Connection-Objekt ein Timer gestartet. Nach Ablauf des Timers wird die Verbindung dann tatsächlich getrennt.

    Auf diese Weise kann ich mitunter mehrere parallele Abfragen (Threading lässt grüßen) durchführen ohne das System nennenswert zu belasten.
    Die Wahrscheinlichkeit, dass mehrere Clients dies gleichzeitig tun ist sehr gering.

    Die QZDAJOB's auf der AS/400 selber werden auch gepoolt. Wenn also ein Job frei ist, wird dieser auch wieder verwendet bevor ein neuer initiiert wird.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Vielen Dank für alle Antworten. Ich werde das alles mit den Java-Kollegen mal besprechen.
    Dieter

  12. #12
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    dann brauche ich einen Application Server, der EJBs (Enterprise Java Beans) unterstützt, verbinde meinen Client an diesen EJB Server und der verbindet über einen Connection Pool an die Datenbank meines Vertrauens. Dann kümmert sich der Pool um die Gesundheit der Connections und temporäre Zugriffspfade etc. werden auf Verbindungsebene gecached etc.
    Hallo D*B,
    auch wenn es jetzt nicht direkt ins AS/400-Forum passt. Aber Du hast die Stichworte Application Server und EJB genannt. Für mich ist das ziemliches Neuland, aber das hört sich interessant an. Bis jetzt hab ich nur mit einem Tomcat-Server gearbeitet, der das bekanntermaßen nicht zur Verfügung stellt. Jetzt habe ich ein wenig nachgelesen, jedoch gibt es ziemlich viele JavaEE Server bzw. EJB-Container, sodass die Auswahl schwer fällt, wenn man sich damit nicht so auskennt.
    Gibt es einen bestimmten Server, den Du empfehlen würdest? Was hältst Du z.B. von TomEE, der relativ neu ist und im Prinzip auf den Tomcat aufbaut und ihn um bestimmte Komponenten erweitert?

    Gruß,
    KM

Similar Threads

  1. Artikel: Mobile Zugriffe auf IBM i
    By NEWSolutions Redaktion in forum NEWSolutions artikel
    Antworten: 0
    Letzter Beitrag: 02-11-13, 11:53
  2. MSGQ von einer AS/400 auf eine andere??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 12-11-02, 08:18
  3. AS/400 und Netzwerke: Wir kaufen Ihre gebrauchte Hardware
    By csupp in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 28-08-02, 12:49
  4. Andere DEV's außer QCONSOLE in QCTL??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 03-08-02, 14:59
  5. FTP Zugriffe selektiv zulassen
    By becama in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 07-04-01, 10:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •