Autor Thema: Programmierung über Funktionsformeln -> Geschwindigkeit der Anwendung  (Gelesen 3640 mal)

Offline snore

  • Aktives Mitglied
  • ***
  • Beiträge: 107
Hallo Forum,
ich habe eine ältere ..damals noch einfach und banal programmierte Anwendung erweitert.
In der Maske stecken irre viele @DbLookup und @DbColumn ...Felder, welche sich Daten aus Ansichten ziehen.
Die Anwendung funktioniert super ... sieht auch gut aus... aber könnte wirklich eine Tick schneller sein.
Hinweis: Läuft auf einem Notes9 Domino-Server.

Gibt's noch generelle Kniffe die DB flotter zu machen ?

Danke
snore

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Klar, a bisserl was geht immer.

Aber mal ehrlich, wie soll hier irgenjeman Tipps geben, wenn wir die Datenbank und den Code nicht kennen.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Mache statt vieler Lookups einen (wenn Du immer mit dem gleichen Schlüssel suchst und nur andere Werte ausliest) und ziehe Dir aus dem die Info, und benutze den Parameter Cache, das sollte schonmal viel bringen


Gesendet von iPad mit Tapatalk Pro
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline snore

  • Aktives Mitglied
  • ***
  • Beiträge: 107
Servus und Danke soweit!
Den Code hier zu platzieren würde nicht viel bringen. Mir ging es rein pauschal um Möglichkeiten meine vielen berechneten Felder etwas zu optimieren.

Tode -> was kommt da noch hin:
....Mache statt vieler Lookups einen...?

1) Mit den Cache probiere ich, das könnte nicht schlecht sein!
2) Bringt eigentlich "Nach Validierung berechnen" viel ... ich hab' das bisher nie richtig verstanden wann man das brauchen könnte?

Danke
snore

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Der Satz war komplett  ;D

Mache aus vielen - einen. Also einen einzigen Lookup.

Chris
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Um es etwas konkreter zu machen:
1. In der lookup-Ansicht eine versteckte Spalte einfügen, in der alle benötigten Angaben in einem String verkettet sind
2. Verstecktes Feld am Anfang der Maske, welches einen Lookup ausführt, um alle Angaben aus dieser Spalte zu holen
3. In den einzelnen Feldern dann nur noch mit @Word den jeweiligen Teil aus dem String extrahieren

Gruß

André

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Grundsätzlich gibt es zwei Möglichkeiten:

1. Spalte mit Werten verkettet:
MeineStrasse~MeinePostleitzahl~MeinOrt~MeineTelefonnummer~MeinFax~MeineMail

Dann machst Du einen Lookup. speicherst das Ergebnis und die Felder selbst haben dann die Formel (Beispiel für Strasse):

Code
@Word( LookupFeld; "~" ; 1 )

Vorteil: Sehr einfach zu codieren, man muss nur zählen können.
Nachteil: bei sehr vielen Werten wird der String unübersichtlich, Mehrfachwerte erfordern zusätzliche Trennzeichen und Implode / Explode

2. Spalte mit Mehrfachwerten:
Strasse=MeineStrasse
Postleitzahl=MeinePostleitzahl
Ort=MeinOrt
telefonnummer=MeineTelefonnummer
Fax=MeinFax
Mail=MeineMail


Auch wieder ein Feld mit dem Lookup, das muss mehrfachwerte erlauben.

In den LookupFeldern steht dann code, der etwa so aussieht:
Code
_myName := @Thisname; 
@Trim( @Right( "#" + LookupFeld; "#" + _myName + "=" ) )

Vorteile:
- Reihenfolge ist egal, die Zuordnung erfolgt über den Feldnamen
- Code in den Feldern ist portabel, weil er sich auf den Feldnamen bezieht, so lange die "Bezeichner" im Lookupfeld genauso heisst wie das Feld, muss man ein neues Feld einfach kopieren, und den Feldnamen anpassen.
- Mehrfachwerte funktionieren direkt (diese tauchen dann ím Lookupfeld einfach mehrfach auf, z.B. so: Telefon=12345; Telefon=45678, und das @Right liefert beide zurück)

Nachteile:
- Etwas komplizierter, overhead im Lookup, weil die Feldnamen mit übertragen werden
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
@snore
Ich hatte letztens das Problem, daß die Latenz der Netzwerkverbindung Client-Server recht hoch war. Da überraschend viele Aufrufe z.B. beim Öffnen einer Maske erfolgten, war die Anwendung für diesen Client "lahm".

Mal so Größenordnungen:
- "gute" Latenz <=1ms
- "schlechte" Latenz >40ms

Vielleicht trifft Dich das ja?

Tips:
- Client_Clock=1 in der notes.ini erzeugt ein detailliertes Log
- mit dem Notes RPC Parser (siehe OpenNTF.org) kann man so ein Log sogar analysieren

Viel Erfolg,
Th.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz