Autor Thema: Größere Datenimport  (Gelesen 4770 mal)

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Größere Datenimport
« am: 21.01.03 - 16:55:31 »
ich habe ca. 150.000 - 200.000 CSV basierende Textzeilen in Notes zu importieren. Nun möchte ich aber die späteren Verarbeitungsprozesse aufgrund des umfangreichen Ansichtsindex reduzieren.

Hierzu habe ich folgende Überlegung:
jede Textzeile beinhaltet mehrere Datenspalpten, Semikolon getrennt. Dabei ist jede Textzeile zu Beginn durch eine Kontonummer gekennzeichnet, die n-mal in den CSV Dateien vorkommen kann.

Wenn ich nun in einer For bzw. While Schleife die Zeilen textweise einlese, checke ich, ob die Kontonummer als Notesdocument bereits vorhanden ist. Wenn nicht, erzeuge ich ein neues Doc mit dieser Kontonummern, wenn ja, schreibe ich die n-te Zeile in ein Textfeld des bereits vorhandenen Kontonummern Documents. Damit reduziere ich die Anzahl der Dokumente für spätere Verarbeitungen erheblich, indem ich eben die Informationen bereits beim Import gruppiere.

Ist dieser Ansatz ok oder sollte ich versuchen zunächst alles in einzelne Arrays virtuell einzulesen (wobei ich mir beim letzteren nicht im klaren bin, ob ich dynamisch beliebig viele Arrays in Anzahl der unterschiedlichen Kontonummern erstellen kann, um damit zum Schluß Docs zu erstellen)?

Ich weiß, ich könnte es viel einfacher in Access haben, aber ich wollte es eben mit Notes komplett machen.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Performance

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.096
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re:Größere Datenimport
« Antwort #1 am: 21.01.03 - 17:41:16 »
der Ansatz ist ok

besser ist du hast die Kontonummer sortiert, dann erzeugst du nur am Anfang einer neuen Kto ein dok und hälst es offen bis eine andere Kto auftaucht. Das Suchen in einer view ab 40k doks ist eine Geduldsarbeit, auch wenn es Lotus Skript ist.


- in so einem Fall gebe ich meinem Datenlieferanten den Auftrag wie er mir die Daten liefern soll.
- wenn du öfters über 100k Zeilen importierst empfehle ich die C-API - das ist dann wirklich der Turbo - vor allem wenn der Server produktiv ist ist die C-API um Längen besser.


cu
Wir können alles außer hochdeutsch !

Alles ist möglich, es ist nur eine Frage der Zeit oder des Geldes!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Größere Datenimport
« Antwort #2 am: 21.01.03 - 17:59:37 »
prinzipiell wede ich die gelieferten Daten leider nie in einem sortierten File bekommen, sondern stets 12 Stück, da die Daten automatisiert durch bestimmte HOST Läufe einmal monatlich in einem CSV File generiert werden, die aufgrund der Vorhaltedauer von 30 Tagen wieder vom HOST entfernt werden (die Files werden per FTP woanders abgelegt).

Im ersten Schritt werde ich wohl dieses oben genannte Verfahren wählen - auch wenn es unsortiert ist - und in einem späteren Step, werde ich versuchen, entweder ein Runtime Modul von Access anzusprechen, das aus der Notes DB abgelöst wird, dann die CSV Daten reinschaufelt und per ODBC mit Notes kommuniziert (um alles in einer Notes DB vorzuhalten, damit neuere Installation auf anderen Server/Client Plätzen einfacher gestaltet sind..bin mir aber leider nicht ganz im klaren, ob ich dabei auf VBzurückgreufen soll oder COM) ODER in einem zusätzlichen Nachfolgeschritt versuchen, in der Tat über C-API zu arbeiten, damit der Einlesevorgang per se beschleunigt wird, jedoch weiterhin die Daten in Access eingelesen werden, um gruppiert zu werden. Habe deswegen Access als Runtime Modul im Kopf, da ich in einem anderen Fall aufgrund HOST Auswertungen Daten in Access anhand Kundenbetreuerschlüsseln gruppiere, daraus variabel Exceldateien pro Empfänger erstelle und dann als Serienmail an die Adressaten versende. Hatte damals aber das Vorgehen aufgesplittet: erst Daten in Access per Fieldmapping eingelesen, dann Excel Tempalte Dateien über VB aus Access heraus generiert und diese dann per Script in Notesdocs angehangen. Ist für normale User natürlich nicht gangbar, jedenStep in separaten Programmen vorzunehmen.

Das Dumme ist an allen Lösungen, daß das Gebilde ca. 15 Jahre laufen soll...*gulp*...wer weiß schon in 15 Jahren, obs überhaupt noch PC´s mit Lotus Notes als Software gibt...roflmao...mir scheint es fast, als müsse ich mich doch mal mit XML befassen, evtl. bekomme ich die HOST Leute dazu, mir die Daten im XML Format zu liefern. Fühlt sich irgendwie zukunftsträchtiger an.

Danke für die Bestätigung, Performance.
« Letzte Änderung: 21.01.03 - 18:01:48 von Rob Green »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Größere Datenimport
« Antwort #3 am: 21.01.03 - 18:13:20 »
Aslo ich kann mich Performance nur anschlie0en: Am Besten die Dokumente nach Kto sortieren. Dann haben wir nur noch ein klassisches Problem der Datenverarbeitung vor uns: den bei allen Azubis so beliebten "Gruppenwechsel". = "Erzeuge ein Doc anhand der Kontonummer und schreibe solange Daten in dieses Dok, bis sich die Kto.-Nr ändert."

ein GetDocumentByKey über die Kontonummer dürfte bei ungeortneten Daten aber auch ganz gut machen, da sich ja die anzahl der Dokumente drastisch reduziert.

Ein anderer Ansatz wäre aber auch, wie es in der klassischen Datenverarbeitung üblich war, eine sog. "Schnelldrehertabelle"

Dabei geht man folgendermaßen vor.

Die Tabelle ist ein Array mit sagen wir einmal dim 10.

Der erste Datensatz wird gelesen und ein Dok anhand der Kto.-Nr erzeugt ; das Dol bleibt aber im Speicher
Nächster Datensatz lesen und anhand der Tabellöe prüfen, ob es bereits ein Dok mit der Nr. gibt.
Wenn nicht, neues Dok erzeugen; wenn ja, Daten in geöffnetes Dok schreiben.
Das geht dann solange, bis das Arrax voll ist, also 10 geöffnete Dokumente da sind.
Kommt jetzt ein Dokument, das in der Tabelle nicht vorhanden ist, wird das Dokument, das zu diesem Zeitpunkt die wenigsten "Treffer" hatte geschlossen.

Damit erhälst du dann eine Art Top 10 der Kto.-Nr.  und du hast die Dokumente, die vile treffer haben immer im Speicher.

Ist ein Dok nicht in der Tabelle, muß natürlich auch gesucht werden, ob das Dok nicht schon gespeichert wurde.

Hab ich mal als Prüfungsaufgabe bei der IHK Essen 1995 gestellt ( COBOL ); spannende Ergebnisse  ;D ;D ;D

Ulrich
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Doc Torte

  • Aktives Mitglied
  • ***
  • Beiträge: 178
  • Geschlecht: Männlich
  • ...promovierter Bäcker... ;-)
    • ...that's me
Re:Größere Datenimport
« Antwort #4 am: 21.01.03 - 18:25:18 »
anderer Vorschlag, Du legst das Doc mit der esten Kontonummer an, erstellst Die nebenbei eine Stringlist, als Listenelement die Kontonummer und als Listeneintrag die DocID der erstellten Docs,
dann kommt die nächste Kontonummer, da fragst Du ab, ob diese schon verarbeitet wurde (IsElement) in der Liste, wenn nein, neuer Listeneintrag Kontonummer/DocID, wenn schoneinmal die Kontonummer gelaufen ist, holst Du Dir das erstellte Doc über die DocID in der Tabelle und das als Schleife läuft auch schneller als in einer Ansicht zu suchen ...

ich verarbeite alle Größeren Datenmengen in Listen, somal man mit Stringlisten keine Größenbeschränkung hat.
Wer nicht ständig besser wird, hört bald auf gut zu sein !
Schritt für Schritt geht's immer vorwärts...

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Größere Datenimport
« Antwort #5 am: 21.01.03 - 19:10:14 »
... Ich hätte einen ähnlichen Ansatz wie Doc Torte, mit zwei Arrays...

... im ersten Array wird die Kontonummer erfasst, im zweiten die dazugehörige DocID. Mit ArraygetIndex prüfe ich, ob in Array 1 die Kontonummer vorhanden ist, wenn ja erhalte ich den Index. Mit diesem Index hole ich aus Array 2 die DocID...

ata

Grüßle Toni :)

Offline wflamme

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 690
  • Geschlecht: Männlich
  • Irgendwie geht das schon...
    • wflamme
Re:Größere Datenimport
« Antwort #6 am: 21.01.03 - 23:13:24 »
Vorsortierung ist sicher empfehlenswert.
Habe auch feststellen müssen, daß die Erweiterung des physikalischen Files beim Import viel Zeit kostet. Notes scheint immer einen Chunk an Platz für neue Docs zu reservieren (dauert lange), der eigentliche Import geht dann recht flott.

Hatte mir mal in einer frühen R5-Version (vor R5.0.2c) so beholfen, daß ich ein Doc mit *Riesenattachment* anlegte, nur um es gleich darauf wieder rauszuwerfen und den auf einen Ruck gewonenen physikalischen Platz dann mit tausenden einfacher Records zu füllen. Das dauerte trotz des Overheads weniger als halb so lange wie das kontinuierliche Schreiben.

Einen Versuch ist's jedenfalls wert.
Grüße,
Wolfgang

"I love deadlines. I love the whooshing sound they make as they pass by..."
DOUGLAS ADAMS

wflamme@mainz-online.de
http://www.sns1.de/partner/flamme/wflamme.nsf

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Größere Datenimport
« Antwort #7 am: 22.01.03 - 01:17:32 »
 :o
WOW

!!! danke für die vielen genialen Tips !!!  :) :) :)

*grins* ist ja wie im Schlaraffenland...

Das was ich letzten Endes erreichen will, daß das Notes angesteuerte Importsystem auf Basis 12 vorhandener CSV Dateien die Daten userfreundlich und zügig einliest. Die Trennung in 12 CSV Dateien wird auf lange Sicht bleiben, auch der Aufbau. In jeder CSV Datei sind die Kontonummern aufsteigend sortiert, wobei pro Kontonummer in einem CSV Datensatz ca. 1-6 Datensätze gleicher KtoNr. untereinander stehen. Daher werde ich wohl dem Vorschlag von DocTorte und ata wählen, der mir in diesem Falle am effizientesten bzgl. meiner Ausgangslage erscheint und zusätzlich wflammes "vorbereitendes" Megadoc.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Doc Torte

  • Aktives Mitglied
  • ***
  • Beiträge: 178
  • Geschlecht: Männlich
  • ...promovierter Bäcker... ;-)
    • ...that's me
Re:Größere Datenimport
« Antwort #8 am: 22.01.03 - 09:15:27 »
... ist doch schön, wenn man helfen konnte...
Wer nicht ständig besser wird, hört bald auf gut zu sein !
Schritt für Schritt geht's immer vorwärts...

Offline Performance

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.096
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re:Größere Datenimport
« Antwort #9 am: 22.01.03 - 19:17:21 »
- ich kann nur empfehlen bei Import von Datensätzen die über 50k gehen ein C-API Programm im batch ablaufen zu lassen - das ist wirklich die effektivste Lösung.
Ich habe auch vorher mit Skript imports gemacht von 100k Sätzen mit update und suchen und speichern usw. - der Agent lief nachts trotzdem 4 Stunden --> dann habe ich alles in C-API gemacht und das Resultat waren 20 Minuten.

Performance ist nicht alles aber ohne Performance ist alles nichst.
 ;D ;D ;D


cu
Wir können alles außer hochdeutsch !

Alles ist möglich, es ist nur eine Frage der Zeit oder des Geldes!

Offline cococo69

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 286
  • Geschlecht: Männlich
  • Super dieses Forum!!!
    • Mein Hobby...
Was ist C-API?
« Antwort #10 am: 22.01.03 - 20:26:11 »
Hallo,

was ist C-API und wo kann man was darüber erfahren?


Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Größere Datenimport
« Antwort #11 am: 22.01.03 - 20:38:33 »
Zitat
Ein geflügeltes Wort und es fast passt immer, gelle ?

Zitat von: Performance
Performance ist nicht alles aber ohne Performance ist alles nichst.
[/quote

Der Brandt würde sich im Grabe rumdrehen ;)


Don Pasquale

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Größere Datenimport
« Antwort #12 am: 22.01.03 - 22:09:37 »
@cococo69

... die C-API ist eine Programmierschnittstelle, da Notes in C geschrieben wurde lässt sich damit sehr viel mehr machen als mit LS...

... mehr dazu findet du im LDD

ata
Grüßle Toni :)

Offline cococo69

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 286
  • Geschlecht: Männlich
  • Super dieses Forum!!!
    • Mein Hobby...
Re:Größere Datenimport
« Antwort #13 am: 23.01.03 - 09:47:18 »
@ Don Pasquale

Danke für Deine HILFREICHE Auskunft!!! ;D

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz