Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: skywook am 22.11.16 - 06:54:57

Titel: Performance Dokumentenvergleich
Beitrag von: skywook am 22.11.16 - 06:54:57
Hallo,

In einer DB sind 1000 fixe Dokumente. Diese müssen mehrmals täglich mit ca. 100 weiteren Docs verglichen werden. Wird ein Doc in den 1000 gefunden, wird ein Feld auf True gesetzt. Bei den restlichen 900 soll der Parameter auf false gesetzt werden.

Wie ist da der beste Ansatzpunkt? Alle 1000 Docs in eine Collection und diese 100 mal durchlaufen?

Für einen Tipp wäre ich dankbar.
Titel: Re: Performance Dokumentenvergleich
Beitrag von: ghostmw am 22.11.16 - 08:17:52
Guten Morgen,

ich denke, um das ganze noch halbwegs performant zu gestalten, wäre folgendes denkbar:

Du holst dir von den 100 Dokumenten einen eindeutigen Schlüssel (den gibt es sinnvollerweise auch in den 1000 Dokumenten) und einen Hashwert (Summe aller zu vergleichenden Felder) in eine Liste, sowas in der Richtung
Code
lstMeineListe ( "Schlüssel" ) = "Hashwert"
.

Mit dieser Liste gehst du deine 1000 Dokumente durch, sowas wie (ist Pseudocode, du musst das ganze noch in LotusScript übersetzen).

Code
While not doc is nothing
     if isElement ( lstMeineListe ( "Schlüssel vom doc" ) ) then 
            if Hashwert ( doc) = lstMeineListe ( "Schlüssel vom doc" ) then 
                  Setze true Flag im doc
            else
                  Setze false Flag im doc
            end if 
    else
            Setze false Flag im doc
    end if 
    set doc = nächstes Dokument
wend

So sollte es halbwegs performant laufen.

Da ich leider nicht weiß, wie dein Vergleich aussieht, habe ich mal angenommen, dass du nur eine Hand voll Felder vergleichen willst.

Gruß
Marco
Titel: Re: Performance Dokumentenvergleich
Beitrag von: Klafu am 22.11.16 - 08:41:33
Wäre es nicht auch eine Möglichkeit, nur die Dokumente zu prüfen, die seit dem letzen Check geändert wurden? (etwa Notesdoc.LastModified <= 10 Stunden)

Chris
Titel: Re: Performance Dokumentenvergleich
Beitrag von: Thomas Schulte am 22.11.16 - 08:47:01
Das schnellste wird sein alle Docs in eine Collection.
Eine zweite Collection bilden.
Alle Docs die umgesetzt werden müssen in die zweite Collection rein und dann ein Stampall aufrufen.
Unter der Voraussetzung das wirklich nur das eine Feld geändert werden muss.

Es gibt auch noch Stampallmulti aber das ist dann etwas aufwendiger.
Titel: Re: Performance Dokumentenvergleich
Beitrag von: thkn777 am 22.11.16 - 10:06:49
 ??? :-: (sorry - zu früh, zu wenig Kaffee... )

Meine Fragen:
- NACH dem Vergleich sollen immer alle 1000 Dokumente (adoc) einen aktuellen Stand haben. In einem Dokument wird ein Item "flag" gesetzt, entweder True oder False - ja?
- was genau willst Du wie vergleichen?

Für das "Stampen" würde ich vermutlich im ersten Schritt auch StampAll versuchen, das ist wirklich ziemlich schnell.

Aber ich denke, das Vergleichen wird Dein eigentliches Performance-Thema sein. Bitte erzähle genauer, was Du eigentlich machen willst.

Gruss,
Th.
Titel: Re: Performance Dokumentenvergleich
Beitrag von: Tode am 22.11.16 - 10:22:07
Ich würde im Übrigen auf jeden Fall die Dokumente einzeln durchlaufen und nicht mit Stampall arbeiten. Denn dann kannst Du prüfen, ob sich überhaupt was geändert hat am Dokument und nur dann speichern... So sparst Du Dir jede Menge Speicheroperationen, und wenn es um Performance geht, ist das eines Deiner grössten Bottlenecks...