Domino 9 und frühere Versionen > ND9: Entwicklung

Performance Dokumentenvergleich

(1/2) > >>

skywook:
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.

ghostmw:
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"
--- Ende Code ---
.

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
--- Ende Code ---

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

Klafu:
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

Thomas Schulte:
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.

thkn777:
 ??? :-: (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.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln