Hallo zusammen,
ich habe nochmal folgende Anforderung:
Lesen einer Excel-Datei --> Aufbereitung der Daten --> Update/Insert in DB --> Senden einer Status-E-Mail.
Ich habe mir einige Gedanken gemacht und bräuchte nun eure Hilfe.
Hier meine Gedanken:
Typisches Pipeline-Probleme --> Verwendung von TPL-Dataflow
Lesen der Datei außerhalb des "Dataflows"
Post in einen Transformlock für Aufbereitung der Daten
Weitergeben an einen ActionBlock für Update oder Insert
Meine Fragen:
Wo fange ich an die Blöcke zu bilden? Bereits beim Einlesen der Datei? Dann hätte ich mehrere Posts in den TransformBlock pro Datei. Oder setze ich einen BatchBlock zwischen Transformer und Action? Allerdings müsste ich dann den BatchBlock hin und wieder manuell auslösen, da die Excel-Datei selten genau ein vielfaches der "Max-Size" des BatchBlocks haben wird.
Wie kann ich optimal bestimmten, wenn die Datei vollständig importiert wurde? Durch die Blockbildung wird dies komplizierter.
Oder sollte ich auf die Blockbildung und parallele Verarbeitung pro Datei verzichten?
Ihr seht ich bräuchte Hilfe bei einigen "Design-Entscheidungen".
Ich hoffe ihr könnt mich ein wenig unterstützen.
Vielen Dank
Wichtig ist vor allem, daß Du so etwas wie EPPlus nimmst, um schnell Excel einzulesen. Wenn Du die neuen XLSX Dateien hast, dann sind Excel Dateien gezippte XML Daten.
Viel bringt es , wenn Du ausreichende große Dictionaries und Listen definierst, um langsames Resizing beim Umsetzen in Datenstrukturen zu verhindern.
Parallelität beim Lesen der XLS Daten bringt meist nix und bei der Datenbank ist mehr die Frage, wieviele Updates/Inserts Du in eine DB-Transaktion packst.