Je suis chargé d'optimiser les performances d'une routine de traitement de données linéaire. Voici un aperçu de ce qui est déjà en place:Traitement de données par lots en temps réel
Les données arrivent sur les ports UDP, nous avons plusieurs écouteurs écoutant sur un port différent et écrivant des données brutes dans la base de données SQL Server (appelons la table un RawData). Ensuite, nous avons plusieurs instances d'une application linéaire à un seul thread saisissant des données brutes de la table RawData et traitant des datarows individuelles. Quels moyens de traitement sont les données brutes sont comparées aux données précédemment reçues pour l'entité donnée, les calculs sont effectués pour calculer le nombre de lectures différentes, puis deux services Web sont appelés pour chaque ligne de données individuelle et enfin un nouvel enregistrement est ajouté pour chaque donnée ligne dans la table ProcessedData. L'enregistrement d'entité correspondant est également mis à jour dans l'autre table. La façon dont je vois le problème, il peut être divisé en plus petites parties et je pourrais utiliser le modèle Producer/Consumer pour le traitement des données: Un thread du producteur remplit une file d'attente partagée (blocage), plusieurs consommateurs saisissent des lignes de données la file d'attente et faire un traitement parallèle d'entre eux. Une fois les consommateurs terminés, ils placent les données traitées dans une autre file d'attente partagée, qui sera ensuite accessible par un autre thread consommateur (single) qui fera un SqlBulkCopy pour insérer de nouveaux enregistrements. Au cours du processus, il y aura d'autres files d'attente partagées qui stockeront les informations d'entité pour les mises à jour et un autre consommateur saisira des informations mises à jour pour les entités et effectuera des mises à jour. La question est, même si elle semble simple, elle me semble être une approche encombrante. Je pense qu'il y a une meilleure façon de faire ce que je cherche. Des suggestions sur la mise en œuvre du modèle Producer/Consumer ci-dessus? Ou devrais-je chercher un modèle de conception différent pour mon problème?
Merci à l'avance
Quand vous dites « requête partagiez », voulez-vous dire « file d'attente partagée »? –
oui, ma mauvaise. Merci de l'avoir remarqué. Corrigé – Dimitri