(Fließend) NHibernate Fortschrittsereignisse für langwierige Transaktionen?

event-listener fluent-nhibernate progress-indicator sqlbulkcopy

Frage

Wir haben das ISaveOrUpdateEventListener-Ereignis angeschlossen und gehofft, dass wir es für jedes während des Speicherdurchlaufs eines ziemlich großen Modells besuchte Knoten an ein Fortschrittsbalken-Update binden können, ABER das Ereignis wird nur einmal ausgelöst, wenn die Sicherungsoperationen gestartet werden (nur auf dem Knoten) auf dem Save () initiiert wurde und nicht auf irgendwelchen Unterknoten).

Gibt es andere Ereignisse, die besser dazu passen?

Wir haben auch versucht, die Speicheroperation (eines hierarchischen Modells) aufzubrechen, indem wir die Traversierung selbst durchführen, aber das scheint die Performance noch weiter zu verschlechtern.

Vielleicht versuchen wir ein Problem zu lösen, für das FNH nicht verwendet werden sollte. Wir sind neu.

Wir haben auch eine alternative Lösung mit SqlBulkCopy eingerichtet, wie an anderer Stelle empfohlen.

Wir haben die Kommentare gesehen, dass FNH in erster Linie für kleinere Transaktionen (OLTP) gedacht ist und nicht die Art von erschöpfendem Modell, an das unser Problem gebunden ist (Signalverarbeitung großer Datenmengen).

Hintergrund:

Wir versuchen, Fluent NHibernate in einem größeren Datenbankprojekt mit Daten zu verwenden, die aus ziemlich komplexen Echtzeitanalysen stammen (Hochfrequenz, mehrere Eingangssignale, lange Versuchszeiten usw.). In einem Prototyp, den wir gebaut haben, sehen wir für den Moment ziemlich unheimliche Wartezeiten und müssen eine Art verlässlichen Fortschrittsanzeiger einstecken.

Akzeptierte Antwort

Ja, jetzt bestätigt - wie in meinem Kommentar oben erwähnt. Eine (mögliche) Lösung besteht darin, Cascades einfach zu drehen und das Modell manuell zu durchlaufen und explizite Aufrufe Save () auszuführen.

Das funktioniert, obwohl es nicht so gut ist, nur ein Ereignis zu behandeln. Angesichts des genuinen Designs von NHibernate wette ich, dass es irgendwo ein Ereignis gibt, das abgefangen werden könnte - die Frage ist nur, unter welchem ​​Namen. ... Ich wette, jemand hier weiß mehr.

Zur Verbesserung der Leistung verwendeten wir auch eine zustandslose Sitzung, die mit unterschiedlichen Batch-Größen experimentierte und regelmäßig / explizit Flush () und Clear () aufruft. Weitere Informationen finden Sie in den folgenden Artikeln:

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

Hoffe das hilft.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum