Autor Thema: Document Collection als SQL Insert  (Gelesen 1908 mal)

Offline ralph71

  • Junior Mitglied
  • **
  • Beiträge: 76
Document Collection als SQL Insert
« 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.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Document Collection als SQL Insert
« Antwort #1 am: 01.04.20 - 08:32:45 »
Witzig, gestern wurde eine sehr ähnliche Frage bei Stackoverflow 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... 
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ralph71

  • Junior Mitglied
  • **
  • Beiträge: 76
Re: Document Collection als SQL Insert
« Antwort #2 am: 01.04.20 - 09:20:25 »
Danke

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz