Erstmal vielen Dank für die detaillierten und informativen Antworten.
Wir benützen einen
SQL Server 2018 mit 255GB
RAM. Die
DB (die grösste) ist so um die 300GB gross. Die einzelnen Datenaufbereitungen (Datenvalidierung, Durchrechnen der Preise, Generieren von Positionen etc.) finden alles bereits in Stored Procedures statt. Die Tabellen der einzelnen Selects innerhalb der STP's sind alle mit Indexes optimiert dort wo es Sinn macht. Wir werden in den nächsten Monaten neuere Storages mit SSD bekommen. Das wird das ganze erheblich beschleunigen.
Das Desktop Programm startet die STP's, wartet auf deren Beendigung und ruft dann einen ebenfalls selbst geschriebenen Reportserver auf, der dann die verschiedenen PDF-Formulare generiert und ggf. versendet. Dieser Reportserver funktioniert auf Basis eines Webservices, dem Jobs übergeben werden können.
Da wir pro Monat tausende Rechnungen generieren (Kleine gehen ein paar Sekunden. Monsterrechnungen eben bis zu 2-5 Min.) macht es aus den im ersten Beitrag erwähnten Überlegungen aus meiner Sicht schon Sinn, diese Aufgabe in ein zweites Programm auszulagern.
Im Gegensatz zu einem Reportserver, wo die Anzahl Prozessschritte sich in Grenzen halten (Reports drucken, ablegen oder versenden) muss der Fakturierungserver einen oder mehrere ziemlich komplizierten Prozesse durchlaufen. Dabei können Warnungen oder Errors anfallen. Deshalb musss jeder Prozessschritt geloggt werden. Je nach Resultat eines Prozesses fallen Entscheidungen an, der Prozess geht also nicht einfach linear durch.
Daher meine Frage nach Design Patterns und Librarys, die mich bei meinem Vorhaben unterstützen könnten.