Autor Thema: Verarbeitung großer Datenmengen  (Gelesen 1241 mal)

Offline skywook

  • Senior Mitglied
  • ****
  • Beiträge: 445
  • Ich liebe dieses Forum!
Verarbeitung großer Datenmengen
« am: 12.06.14 - 08:35:46 »
Hallo,

ich möchten eine Excel-Datei mit ca. 700.000 Zeilen in Notes einlesen.  Die eingelesenen Daten werden später komprimiert, so dass in der DB max 3000 Dokumente angelegt werden. Die Excel-Datei kann im Vorfeld nicht verändert werden um die Anzahl der Datensätze zu reduzieren.

Mein Problem ist der Einlesevorgang dieser Datenmenge. Hierbei habe ich zwei Ansatzpunkte:

-Zuerst alle in einen Array einlesen und danach im Array eventuelle "Leichen" mit ArrayGetIndex filtern und löschen.
oder
- Direkt beim Einlesen in den Array die Daten prüfen und eventuelle "Leichen" löschen.

Welche Variante würdet Ihr vorschlagen oder gibts für diese Datenmenge einen anderen Ansatzpunkt.

Für einen Tipp wäre ich dankbar.

Offline RunRevilo

  • Junior Mitglied
  • **
  • Beiträge: 51
  • Geschlecht: Männlich
Re: Verarbeitung großer Datenmengen
« Antwort #1 am: 12.06.14 - 09:00:13 »
Hallo,

wenn ich mich nicht täusche, hast du doch bei einem Array das Problem dass ein Array max. 32767 (größte Zahl für Integer) Werte haben kann. So stehts in meine Notes Hilfe:
"The size of an array -- the number of dimensions and the extent of each individual dimension -- is defined by the array's bounds list. Each dimension has a lower bound and an upper bound, specified as integer values."

Ich würde das evtl. mit mit dem Datentyp List probieren.

Dim dateizeilen List as string
FileNr = FreeFile ()
Open Datei For Input As FileNr  ' Datei ist dein Dateiname
Dim RecNr As Long
Dim zeile As String
   
'Jede Zeile der Datei in den Liste dateizeilen schreiben
RecNr = 1
 Do While Not EOF (FileNr)
    Line Input #FileNr, zeile
   dateizeilen (RecNr) = zeile
   RecNr = RecNr + 1
  Loop
Close #FileNr


und dann kann man einfach die Liste durchgehen und die Werte verarbeiten.
ForAll dz In Dateizeilen
   wert = Split (dz,TZ)     'TZ ist das Trennzeichen in der Liste
End ForAll



Grüße
Oliver
Grüße aus dem schönen Südtirol
Oliver C

Es gibt keine dummen Fragen, sondern nur dumme Antworten

Laufen ist der ideale Ausgleich zu jeglicher Arbeit, denn beim Laufen muss man nicht Denken.

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Re: Verarbeitung großer Datenmengen
« Antwort #2 am: 30.06.14 - 14:53:36 »
Hallo skywook,
solange es irgend geht - nimm Listen!

Ich würde von den Mengengerüsten ausgehen: 700.000 Zeilen... und was steht da so drin? Jeweils 100 Zeichen je Zeile macht 700.000*100 = 70MB Daten --> Das allein würde mich dazu bewegen, den Check VORHER zu machen.

Zum Check selbst - was sind "Leichen", sprich: wie aufwendig ist eine Prüfung, ob eine Zeile in die NotesDB soll oder nicht? Du willst aus 700.000 Zeilen Excel (oder CSV?) 3.000 Notes-Docs machen... heißt das, das Dich nur 3.000 aus 700.000 Zeilen interessieren? Oder faßt Du mehrere Zeilen Excel in einem Notes-Dokument zusammen? Auch das spricht eher für einen VORHER Check.

Tip aus der Praxis: so um 3*150.000 Listenelemente á 46 Zeichen je Job hat Notes R8.53 bisher klaglos verdaut, allerdings kommt irgendwann das Thema Laufzeit auf die Tagesordnung. Wenn Du das mit Listen und auch noch per Agent machen willst, denke daran, daß die Speicherbereinigung nochmal ungefähr soviel Zeit frißt, wie das Aufbauen der (gefüllten) Listen. Also am besten zum Schluß gleich per Hand die Listen mit ERASE löschen, dann kannst Du Dir wenigstens sicher sein, daß die aktuelle Amgr-Instanz nach dem finalen "ENDE"-Print auch tatsächlich bereit für neue Herausforderungen ist und nicht noch Minutenlang mit Putzen beschäftigt ist.

Wenn Speicher zum Problem wird, kannst Du von Listen auf Strings ausweichen. Nachteil: viel langsamer.

Viel Erfolg.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz