Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: bikerboy am 18.02.09 - 15:46:22
-
Hallo zusammen,
wenn ihr viele Dokumente in 2 DBs vergleichen wolltet würdet ihr die Dokumente mit einen Walk the View durchgehen oder eher über die Entrys .
Ich persönlich würde eine Walk the View machen. Mein Kollege nimmt aber die Entrys. Was ist denn nun besser ?
-
Entrys sind auf jeden Fall schneller :) und eleganter!
-
Warum ?
-
Kommt IMHo u.a. drauf an
a) wie man durchstept (GetNthDocument ist böse)
b) ob die Daten, die man über den Entry bekommt reichen, oder ob man erst recht wieder das Dokument öffnen muss - dann würd ich gleich über die view gehen.
-
Bei Entrys durchläufst Du den Ansichtsindex, das ist eine fertige Tabelle. Bei View-->Dokument musst Du dir noch das Dokument aus der DB holen und im Dokument dann noch das Feld raussuchen... . Das dauert etwas, nicht viel aber summiert sich über die Anzahl vieler Dokumente.
-
Naja nun sind aber nicht alle informationen in der ansicht vorhanden, also muss man dann früher oder später eh ans dokument oder ?
@m3
Das mit nTh-Document ist mir bekannt.
Ein Freund meinte letztens dass GetGetLastDocument sogar schneller ist als GetFirstDocument, kann das jemand hier bestätigen.
-
Das ist natürlich richtig, wenn man mit Entrys arbeitet sorgt man auch dafür dass alle Infos in der Ansicht sind, ansonsten wäre das "Gewollt und nicht gekonnt"!
-
"Entrys" ist aber ein sch**ss-Englisch. Wenn schon: "Entries". Bitte ... ;)
Robert: Was nun schneller ist, kommt auf Deine Rahmenbedingungen an. Wenn Du erste Hinweise ("Da muss was sein") schon über eine View bekommst, dann würde gelten: Erst so, dann weiter eben anders. Wenn das prinzipiell nicht gilt: Dann ist sind die ViewEntries doch sowieso ausgeschlossen. Ist das nicht offensichtlich?
Was das Laufzeitverhalten "GetFirstEntry vs. GetLastEntry" angeht: Wie hat der Knabe denn das gemessen? Das kommt alles auch der gleichen internen Table zur View, und welche NoteID jetzt gezogen werden soll - egal (in diesem Fall). Welche Rolle sollte das spielen? First or Last - hier geht es nur um Bruchteile von Millisekunden. Es lohnt nicht, darüber zu debattieren.
Bernhard
PS: Auf die Fortsetzung dieses Threads bin ich mal wieder gespannt ;)
-
Hallo ihr
um noch mal auf den ursprünglichen Eintrag zurückzukommen, es ging darum viele Dokumente in 2 DB's miteinander zu vergleichen.
Wie bekommt man das schnell.
ein paar Dinge dazu :
- erstens: ich muss einen Weg finden, nicht jedes Dokument mit jedem vergleichen zu müssen.
- zweitens: bei Dokumenten ist leichter zu entscheiden, dass sie verschieden sind, als das sie gleich sind. -> Spricht für Entries. Ein gezielt ausgewähltes item reicht.
- drittens: wenn es schnell sein soll, ist mir "elegant" sch****egal.
Kristina¨
-
Um eine grosse Menge an Dokumente zu vergleichen, hat Andrew Pollack bereits 2003 was geschrieben. Zusammensuchen müsst ihr euch das aber selber.
http://www.thenorth.com/apblog4.nsf/0/5F6A05E49BDB349285256EBC0054545B
-
Zum Verweisartikel von eknori:
Wenn man statt dem Evaluate(@Password(string))
ein
notesSession.HashPassword( String )
nimmt, umgeht man damit die petenziellen Fallen der String-Delimeter.
Gruß
Norbert
-
Kristina, die Diskussion bleibt solange rein theoretisch (nicht unbedingt hilfreich bei einem solch weiten Feld), bis Du zumindest ansatzweise ansagst, was Du vergleichen musst. Vielleicht kommen da dann ja auch noch Aspekte wie Normierung, Vorauswahl etc. hinzu.
Kannst Du etwas praktischer werden?
Bernhard
-
Also ich habe jetzt für mich einen Weg gefunden, der funktioniert.
Ich gehe in DB1 hole mir alle dokumente per getalldocumentsbykey.... so habe ich einen massigen zugriff auf die db.
die darausresultierende doccoll gehe stück für stück durch und erstelle eine anhand einer vorher definierten fieldlist einen string mit allen gewünschten feldern spereiert durch einen delimiter.
als listtag habe ich einen schlüssel angeben.
wenn ich diese eine riesiege liste fertig habe gehe ich in die andere db mache ein walk the view und gucke gibt es den schlüssel in der liste, wenn ja baue ich den wieder einen datenstring zusammen , dann vergleiche ich die beiden strings und erst wenn dann noch ein unterschied besteht gucke ich mir die strings genauer an und kann dann feststellen wo der unterschied ist.
wenn ich einen eintrag in der liste gefunden habe entferne ich den eintrag aus der liste damit ich wieder speicher frei gebe.
das ganze dauert bei 300.000 dokumenten bei 10 felder rund 44 min , womit ich persönlich sehr zufrieden bin