Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Design für Excel-Files lesen-> Daten aufbereiten -> Update/Insert in DB & Senden einer E-Mail
Rioma
myCSharp.de - Member



Dabei seit:
Beiträge: 228

Themenstarter:

Design für Excel-Files lesen-> Daten aufbereiten -> Update/Insert in DB & Senden einer E-Mail

beantworten | zitieren | melden

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:

1) Ich würde die einzelnen Datensätze pro Datei in Batchblöcke zusammenfassen und dann im ActionBlock parallel abarbeiten und pro "Batch" nur eine Transaction nutzen.

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?

2) Der ActionBlock ist mit dem Import momentan das letzte Glied im "Dataflow". Wie verfahre ich am besten mit der EMail? Die EMail kann entweder eine Erfolgsmelung oder eine Errormeldung enthalten. Sollte ich hier einen weiteren Block verwenden, oder das Versenden aus dem "Dataflow" herausnehmen? Eine Verarbeitung über eine kleine Warteschlange mithilfe der BlockingCollection wäre ebenfalls eine Möglichkeit.

Ihr seht ich bräuchte Hilfe bei einigen "Design-Entscheidungen".

Ich hoffe ihr könnt mich ein wenig unterstützen.

Vielen Dank
private Nachricht | Beiträge des Benutzers
weismat
myCSharp.de - Member



Dabei seit:
Beiträge: 878
Herkunft: Frankfurt am Main

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers