(Courant) NHibernate événements de progression pour les transactions longues?

event-listener fluent-nhibernate progress-indicator sqlbulkcopy

Question

Nous avons associé l'événement ISaveOrUpdateEventListener en espérant pouvoir l'associer à une mise à jour de la barre de progression pour chaque nœud visité lors de la sauvegarde d'un modèle assez volumineux, MAIS l'événement ne se déclenche qu'une fois lorsque les opérations de sauvegarde démarrent (uniquement sur le nœud Save () a été lancé et non sur un sous-noeud).

Y a-t-il d'autres événements qu'il serait plus approprié d'écouter pour cela?

Nous avons également essayé d'interrompre l'opération de sauvegarde (d'un modèle hiérarchique) en effectuant nous-mêmes le parcours, mais cela semble dégrader davantage les performances.

Peut-être essayons-nous de résoudre un problème pour lequel FNH n’était pas destiné à être utilisé. Nous sommes nouveaux à cela.

Nous avons également mis en place une solution alternative utilisant SqlBulkCopy, comme recommandé ailleurs.

Nous avons vu les commentaires selon lesquels FNH est principalement supposé pour les petites transactions (OLTP) et non le type de modèle exhaustif auquel nous sommes liés par notre problème (traitement du signal d'énormes volumes de données).

Contexte:

Nous essayons d'utiliser Fluent NHibernate sur un projet de base de données plus vaste avec des données recueillies à partir d'une analyse en temps réel assez complexe (haute fréquence, signaux d'entrée multiples, temps d'expérimentation longs, etc.). Dans un prototype que nous avons construit, les temps d'attente sont assez effrayants pour le moment et nous devons intégrer un indicateur de progression fiable.

Réponse acceptée

Oui, maintenant confirmé - comme mentionné dans mon commentaire ci-dessus. Une solution (possible) à cela est simplement de tourner Cascades et de faire la traversée de modèle manuellement et de faire des appels explicites de Save ().

Cela fonctionne, même si ce n'est pas aussi simple que de gérer un événement. Néanmoins, étant donné la conception originale de NHibernate, je parie qu’un événement quelque part pourrait être intercepté - la question est juste sous quel nom. ... Je parie que quelqu'un ici en sait plus.

Pour améliorer également les performances, nous avons utilisé une session sans état, expérimentée avec une taille de lot différente, et appelé périodiquement / explicitement Flush () et Clear (). Voir les articles ci-dessous pour plus de détails:

http://davybrion.com/blog/2008/10/bulk-data-operations-with-nhibernates-stateless-sessions/

http://ideas-net.blogspot.com/2009/03/nhibernate-update-performance-issue.html

J'espère que cela t'aides.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi