Hallo zusammen,
ich habe hier folgende Problemstellung:
Ein Hintergrunddienst soll sich aus einer (angenommen beliebigen) Datenquelle Stammdaten holen, die zur weiteren Datenverarbeitung benötigt werden.
Die Sätze dieser Stammdaten haben eine Eigenschaft, die sie in unterschiedliche Kategorien einteilt, die die weitere zeitliche Verarbeitung regeln. Außerdem sollen die Stammdaten in einem definierten Intervall neu eingelesen werden, damit Änderungen automatisch übernommen und berücksichtigt werden.
Grob gesagt gibt es Datensätze, die alle 1, 2, 5 oder 10 Minuten verarbeitet werden sollen.
Ich wäre jetzt folgendermaßen vorgegangen:
Jetzt gibt es inzwischen aber ja schon neuere Möglichkeiten wie Tasks, Pipelines etc. mit denen ich aber noch nicht konkret gearbeitet habe.
Hat jemand evtl. eine Empfehlung für mich, wie ich so eine Aufgabe möglichst "sauber" realisieren könnte?
Hab mir auch schon Sachen wie Quartz.Net angesehen aber ich denke, dass das für meine Zwecke evtl. oversized ist...
Hört sich nach einem Lehrbuch-Fall von einer Mischung von http://www.quartz-scheduler.net/ (für das Scheduling) und TPL Pipelines für die Schrittweise-Abarbeitung an
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt,
erst mal vielen Dank für die schnelle Antwort!
Dann war ich ja schon mal gar nicht so falsch dran.. Quartz.Net schaue ich mir dann mal genauer an.. die Pipelines habe ich mir auch schon angesehen, allerdings hätte ich nicht mehrere hintereinandergeschaltete Pipelines...
Ich habe ja keine mehrstufige Verarbeitung sondern nur einmal das Laden der Stammdaten, die dann nicht weiter verarbeitet werden, und das Laden der Bewegungsdaten in verschiedenen Intervallen, die dann wirklich verarbeitet werden.
Da die geladenen Bewegungsdaten dann aber auf die gleiche Art und Weise verarbeitet werden bräuchte ich nur eine BlockingCollection, in die alle Bewegungsdaten geschrieben werden und aus der Sie dann zur Verarbeitung "entnommen" würden.
Hab ich das so richtig verstanden?
Das Laden ist ein Schritt (zB typeof(Action<T>)), das Verarbeiten ist ein Schritt.. etc etc...
Das kann man beliebig skalieren..
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code