[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Nachtrag: die DB schließt den ODP automatisch von selbst wenn bestimmte Kriterien erfüllt werden.
    Z.B. Wenn also ein ALTER TABLE abgesetzt wird, werden alle ODPs (die von SQL offen gehalten werden) automatisch geschlossen um die Sperren aufzuheben.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Die Performance auf diese Art mit einzelnen SQL's zu lösen ist wirklich grottenschlecht.
    Ich habe das für einen Kunden realisiert (es wurde als SQL-Funktion benötigt) und musste hier dramatische Einbußen hinnehmen.
    In Java ist es so, dass ich einen Datensatz lese und mit den entsprechenden GetSet-Methoden nur noch auf Speicherobjekte zugreife. Ein SQL wird da nicht mehr ausgeführt.
    Möchtest du das dynamisch in einer ILE-Prozedur analog betreiben musst du den Datansatz per SQL komplett einlesen und dir eine Tabelle der Feldnamen mit den Werten dazu aufbauen (das geht auch dynamisch). Dann stellst du eine "READ"-Funktion zur Verfügung, die ggf. über den Schlüssel cached und einzelne Get/Set's für die Feldinformationen.
    Um es mit dem Begriff "Streng typisierte Objekte" zu vergleichen müsstest du real für jedes Feld einen namentlichen Get/Set-Zugriff generieren, also GetKundenNr/SetKundenNr, GetName1/SetName1, ...
    Da ILERPG aber nicht objektorientiert ist kann man solche Ansätze eher in die Tonne drücken da sie weder performant noch hilfreich sind.
    Ein simpler Zugriffshandler für komplette Strukturen mit diversen Zugriffen ist da allemal effektiver und logischer.
    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
    Jan 2012
    Beiträge
    1.217
    Eine Idee, um die möglicherweise suboptimale Performance zu verbessern, wäre es, wenn sich deine Procedure merkt, wie der Schlüssel beim letzten Aufruf war. Dann könntest du nur beim ersten Aufruf den gesamten Datensatz holen und in eine extern definierte Datenstruktur schreiben. Alle Folgeaufrufe mit gleichem Schlüssel würden dann kein eigenes SQL mehr ausführen, sondern einfach das Feld aus dem bereits geholten Datensatz zurückgeben.

    Dieter

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... nuir mal selber vergleichen:
    Variante 1: sql Zugriff pro Feld
    Variante 2: sql Zugriff pro Datensatz
    Variante 3: Blockfetch in ArrayDS für kompletten Auftrag mit allen Joins!!!

    natürlich kann eine Serviceprogramm dann das alles in calls auf getXYZ für jedes Feld auflösen, aber die Programmierer Performance wäre katastrophal - das will doch alles getippt werden!!!

    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/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Nun, vielleicht fällt da einem ein Generator für so einen Quatsch ein.
    Zu bedenken ist ja noch folgendes:
    Ein Serviceprogramm wird ja innerhalb des Jobs von verschiedenen Programmen aufgerufen.
    Also nur simple Get/Set-Routinen reichen da nicht aus, da der "aktuelle" Datensatz inzwischen gewechselt sein könnte.
    Wer es denn kompliziert mag, kann noch D*B's Hashtable-Implementation verwenden um je Programm per zusätzliche Id auf den jeweils gecachten Satz zuzugreifen.
    Wer dabei allerdings noch den Überblick behalten will...
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... dafür würde ich aber (m)einen echten cache nehmen, der ist aber (noch) nicht Open Source.
    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
    Feb 2001
    Beiträge
    20.748
    Ob ich das dann noch allgemeingültig verwenden würde...
    Für die Infor-XPPS-Anwendung habe ich für einige Dateien (Tabellen, Steuerwerte o.ä.) einen internen Cache eingerichtet. Der Vorteil hier war, dass es für die Dateien Filehandler gibt und die Inhalte weitgehend statisch sind sowie nur lesend verwendet werden.
    Die Programme sind per CVTRPGSRC in ILE (incl. Copy!) konvertiert.
    Dann wird in einer Tabelle der Schlüssel und Datensatz beim 1. Zugriff gespeichert und mit jedem weiteren Zugriff aus der Tabelle geladen.
    Dies hat die Zugriffe auf die Dateien erheblich reduziert und die Laufzeit um Faktor 20 verkürzt.
    Dabei habe ich mir nicht die Mühe gemacht, die Tabellen noch zu optimieren um einen %lookupeq() zu verwenden. Aber da könnte man sicherlich noch ein paar Millisekunden rausholen.
    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

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... Problem ist beim generischen cache die Keygröße, da man aber meist keine eindeutige Zuordnung braucht, genügt ein Hash (bei Kollision wird einfach verdrängt).
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Solange du dich an die AS/400-Spezifikation für Schlüssel hältst:
    - max. 120 Felder
    - max. 2000 Zeichen
    ist doch alles i.O:-;.
    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

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... die Suche über 2000 Zeichen key ist zu langsam
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Auch mit Hash? Das finde ich ungewöhnlich.
    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

Similar Threads

  1. Fully Free und SQLRPGLE
    By dschroeder in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 18-12-15, 13:01
  2. Interne Prozeduren mit DFTACTGRP
    By DEVJO in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 16-09-15, 14:14
  3. SQLRPGLE und Printerfile
    By Toschie in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 02-02-15, 15:28
  4. Probleme mit SQL-Prozeduren
    By AnjaS in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 16-01-03, 10:18
  5. Compilierung SQLRPGLE
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 01-10-01, 18:31

Berechtigungen

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