Autor Thema: Gelöschte records beim import aus relationaler DB  (Gelesen 1588 mal)

Offline Grischu

  • Frischling
  • *
  • Beiträge: 40
  • Geschlecht: Männlich
Ich habe folgedes Problem.

Vor Jahren habe ich eine Datenbank geschrieben die Import/Export aus relationalen Datenbanken via Textdateien durchführt.
Bei grossen Dateien werden täglich nur die geänderten Datensätze übermittelt. Bei einigen Hilfsdateien wird jedoch täglich die ganze Datei übermittelt Dabei musste ich auch einen Mechanismus "erfinden" der herausfindet ob einzelne Datensätze bzw Dokumente nicht mehr vorhanden sind.
Die Lösung bestand darin das ich alle Dokumente in einen Folder verschiebe, beim Import prüfe ich die Dokument, aktualisiere sie wenn nötig und entferne sie wieder aus dem Folder. So das nur wirklich geänderte Dokumente mutiert werden und so die Replikationslast für Aussendienstmitarbeiter mit langsamen Internetverbindungen klein gehalten wird.

Dies hat bis vor einigen Tagen problemlos funktioniert.  Neuerdings bekomme ich aber immer die Fehlermeldung "Folder is larger than supported, cannot perform operation."  bei einer der Importe.  Diese betrifft rund 120'000 Dokumente.

Der Kunde hat die Serverversion 7.0.3. Mit 7.0.4 FP1 gibnts scheinbar einen Fix dafür.  Allerdings ist bei dem Kunden der Update auf 8.5 für Herbst geplant und vorher will er nix updaten.


Hat jemand eventuell eine Idee wie ich das ohne Folder und ohne alle Dokumente zu editieren lösen kann ?

Twitter is eine typische Erscheinung der Generation ADS & SMS. Für einen Brief zu faul, für einen kompletten Satz zu dumm und für korrekte Grammatik zu cool.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Gelöschte records beim import aus relationaler DB
« Antwort #1 am: 27.05.10 - 09:22:37 »
Ich verwende dazu Listen. Erst lese ich alle Dokumente in die Liste ein und lösche Sie dann wieder heraus (genau wie Du mit dem Ordner). Hier ein paar praktische Befehlszeilen dazu:

Dim dokumente List As String 'Declariert die Liste
dokumente (importschluessel) = doc.UniversalID 'Nimmt eine UniversalID zu einem Importschlüssel auf
Erase dokumente (importschluessel) 'Löscht eine UniversalID aus der Liste
If Iselement (dokumente ((importschluessel)) Then ... 'Prüft das Vorhandensein eines Dokuments in der Liste anhand des Importschlüssels
Forall dokument in dokumente
   x = dokument 'x enthält jetzt die UniversalID des Dokuments
   x = Listtag (dokument) 'x enthält jetzt den Importschlüssel des Dokuments
End Forall
x = dokumente ("123abc") 'x enthält die UniversalID des Dokuments mit dem Importschlüssel "123abc"

Listen kennen keine logische Speicherbegrenzung, es kracht erst, wenn der Arbeitsspeicher voll ist. Man kann auch Listen von Objekten erstellen (Dim docs list As NotesDocument), und dann die Listenelemente mit Set setzen. Davon würde ich aber in Deinem Fall abraten, denn dann hast Du 120.000 Dokumente im Speicher, bei der obigen Methode mit der UniversalID nur 120.000 UniversalIDs, über die Du dann auf die Dokumente zugreifen kannst.

Funktioniert hervorragend, ist eines meiner Lieblingskonstrukte in Script. Funktioniert praktisch so wie ein Array, bei dem die Zählvariable freier Text ist. Die Schlüssel (hier der importschlüssel) müssen aber eindeutig sein.

Offline Grischu

  • Frischling
  • *
  • Beiträge: 40
  • Geschlecht: Männlich
Re: Gelöschte records beim import aus relationaler DB
« Antwort #2 am: 27.05.10 - 10:12:13 »
Vielen Dank für den Tip, funktioniert bestens :)
Twitter is eine typische Erscheinung der Generation ADS & SMS. Für einen Brief zu faul, für einen kompletten Satz zu dumm und für korrekte Grammatik zu cool.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz