Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Kadlec am 13.02.07 - 13:07:22
-
Hallo,
wie im Betreff schon erwähnt möchte ich einen grösseren Datensatz in eine DB importieren. Das habe ich mittels des csv Import scripts aus der Sandbox gemacht.
Der Import dauerte ca. 2 Stunden.
Nun sollen auch noch wöchentlich updates gemacht werden.
Neue Datensätze werden neu angelegt, nicht mehr vorhandene verbleiben in der DB und gewisse Änderungen werden in das schon vorhandene Dok. geschrieben.
Ich habe allerdings die Befürchtung das ein Update dann so Richtung > 4 Stunden geht.
Wie machen dass den die Profis ;D
Gruss
Boris
-
Ich habe allerdings die Befürchtung das ein Update dann so Richtung > 4 Stunden geht.
Ist das nicht vom Datenvolumen abhängig, was da wöchentlich anfällt ?
-
Die Datei wird bis zu einem Zeitpunkt x noch um ca. 20 000 Datensätze anwachsen, danach sollten sich eigentlich die inaktiv gewordenen (nicht mehr in Datei) mit den neuen die Waage halten aber es gibt ja Änderungen an bestehenden Datensätze.
Auf alle Fälle muss ich ja die komplette Datei einlesen und mit dem Inhalt der Db abgleichen.
Und dieser Abgleich denke ich wird dann in Richtung 4 Stunden gehen.
Oder bin ich da auf dem Holzweg und es geht irgendwie anders, schneller?
Boris
-
Ich glaub jetzt nicht wirklich, das es so lange dauern muss. Da dürfte beim Import noch einiges an Optimierungsmöglichkeiten vorhanden sein.
Ich fiesel hier mit einem Agent ein Logfile von einem Apache Web Server das knapp 1 Gig groß ist lokal in 30 Minuten durch. Da sind ca 1,2 Mio Zeilen drin und das wird auf mehrere Lists verteilt, aufsummiert, verhackstückt und dann sowohl in Datei Form und teilweise auch als Dokumente wieder ausgegeben.
Du dürftest mindestens zwei Knackpunkte haben. Der eine sind deine Ermittlungen ob ein Dokument bereits vorhanden ist oder nicht. DBSearch ist nicht gut für so was. Und der andere das deine Schreiboperationen auf gar keinen Fall Auswirklungen auf die Ansichtsindices haben dürfen. Außerdem sind Print Anweisungen in Background Agents sowas von tödlich für die Performance, das glaubt man nicht.
-
Und genau um diese "Optimierungsmöglichkeiten" geht es.
Da bräuchte ich ein paar Schubser in die richtige Richtung.
Das mit der Ermittlung vorhanden/nicht vorhanden ist schon mal mein erstes Problem.
Ein Abgleich Feld für Feld fällt schonmal weg denke ich, also alle Felder in einen String und dann mit der Importierten Zeile vergleichen???
-
Wenn's da einen eindeutigen Key bei den Docs gibt, getdocumentbykey und dann alle Felder blind rübernageln, ansonsten by notfound Doc neu anlegen.
-
Ein Abgleich Feld für Feld fällt schonmal weg denke ich, also alle Felder in einen String und dann mit der Importierten Zeile vergleichen???
Ja. D.h. oft gibt es doch Felder oder Kombinationen von Feldern, die vom logischen Standpunkt her eindeutig SEIN MÜSSEN.
Für NotesView.GetDocumentByKey() kannst du auch einen Array als Suchwert nehmen.
Oder du schreibst in dem Agenten unmittelbar vor dem Auslesen der Datei alle vorhandene Werte der Datenbank in einen Datentyp List als - sagen wir - LookupProxy.
Du baust den key zusammen und dann mit der Universal ID des Documents in eine LIST. LotusScript kennt da eine schöne isMember Funktion. Schau mal ein bischen die notes-hilfe durch. Es ist keine Raketenwissenschaft.
-
Weil Du ja fragtest, "wie das die Profis machen"... ;D
Die nehmen dafür Profi-Tools.
Weil die - obwohl sie etwas kosten - viel billiger sind als wochenlange Eigenentwicklungen.
Ein sehr gutes Import/Export/Abgleich Tool für Deine beschriebene Anforderung wäre z.B.
die "InfoServ Pump" von der InfoServ AG.
http://www.infoserv.de/webcontent_infoserv/website.nsf/urlnames/product_pump?OpenDocument&cat=4
Lernt man in einer Stunde zu bedienen, geht einmalig oder scheduled, viele Connectoren, ist billiger als zwei Tage Entwicklung und vor allem - es funktioniert.
Kann ich aus eigener Benutzung empfehlen.
Gruß,
Uwe
-
Hallo
Habe am Donnerstag mal die grössere der beiden Dateien ca. 20 000 Datensätze importiert.
Habe meinen Rechenknecht über Nacht laufen lassen das gabze hat aber nur 30 minuten gedauert.
Hat mich selbst ein wenig überascht aber OK.
Meine Befürchtung hat sich also nicht eingestellt.
Boris