Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: ralph71 am 31.03.20 - 16:34:45

Titel: Document Collection als SQL Insert
Beitrag von: ralph71 am 31.03.20 - 16:34:45
Hallo,
in einer Document Collection (DC) habe ich 30000 Dokumente. Bestimmte Felder der jeweiligen Dokumente möchte ich mittels ODBC in eine SQL-Datenbank schreiben.
Jetzt kann ich über einen Insert beim Durchlaufen der DC jeden Datensatz einzeln in die Tabelle schreiben (ein Dokument = eine Tabellenzeile). Das ist ja kein Problem. Allerdings scheint mir das aus Performance-Gründen nicht die beste Wahl zu sein.
Besser wäre es doch, die Werte als Block zu schreiben. ZB immer 100 Zeilen auf einmal. Geht das? Wenn ja, wie? Wäre das auch tatsächlich schneller?

Danke euch.
Titel: Re: Document Collection als SQL Insert
Beitrag von: Tode am 01.04.20 - 08:32:45
Witzig, gestern wurde eine sehr ähnliche Frage bei Stackoverflow (https://stackoverflow.com/questions/60941068/how-to-bulk-insert-to-a-sql-table-from-lotusscript-agent) gestellt. Die Antwort von dort gilt auch hier:

Finde raus, wie ein "Multiupdate- Statement" in Deinem Ziel- Datenbanksystem bzw. mit Deinem verwendeten ODBC- Treiber aussehen muss und formatiere ein solches Statement. Dann kannst Du auch BULK- Operationen durchführen. Das könnte schneller sein, aber wissen wirst Du es erst, wenn Du es ausprobiert hast.

Das interessante an der Aufgabe: Ein "GetItemValue" ist schon an sich ein recht "teurer" Vorgang, was die Zeit angeht (bis zu 1/1000 Sekunde pro Vorgang), und auch eine String- Concatenation um den letztendlichen Query- String zusammenzubauen ist ähnlich "teuer". Das heisst: Selbst wenn Du nur ein Feld ausliest und eine Concatenation pro Dokument machst, bist Du vermutlich schon bei einer Laufzeit zwischen 30 und 60 Sekunden, ohne dass Du auch nur eine einzige Datenbank- Operation durchgeführt hast. Wenn Du dann noch die DC "suboptimal" baust (GetNthDocument statt GetNextDocument), dann dauert nur das durchlaufen der Schleife, ohne auch nur eine einzige Operation, mehrere Minuten...

Um also wirklich zu messen, welche Variante schneller ist, musst Du wirklich alles messen... 
Titel: Re: Document Collection als SQL Insert
Beitrag von: ralph71 am 01.04.20 - 09:20:25
Danke