(Fluent)NHibernateは長いトランザクションのイベントを進めますか?

event-listener fluent-nhibernate progress-indicator sqlbulkcopy

質問

私たちはISaveOrUpdateEventListenerイベントをフックして、かなり大きなモデルのセーブトラバーサル中に訪問されているノードごとにプログレスバーを更新することを期待しましたが、セーブ操作が開始されたときにイベントが1回だけ発生しますSave()が開始され、サブノードには登録されていない)。

これに耳を傾けるのに適している他のイベントはありますか?

私たちはまた、横断的な処理を行うことによって(階層モデルの)セーブ操作を分割しようと試みましたが、それはパフォーマンスをさらに低下させるようです。

おそらく、私たちはFNHが使用されることを目的としていない問題を解決しようとしています。我々はそれに新しいです。

他にも推奨されているように、SqlBulkCopyを使用して代替ソリューションをセットアップしました。

FNHは主に小規模なトランザクション(OLTP)であり、私たちの問題(巨大なデータボリュームの信号処理)によって縛られている徹底したモデルのタイプではないというコメントを見てきました。

バックグラウンド:

我々は、かなり複雑なリアルタイム解析(高周波数、複数の入力信号、長い実験時間など)から収集されたデータを使用して、より大きなデータベースプロジェクトでFluent NHibernateを使用しようとしています。試作したモデルでは、現時点では非常に恐ろしい待機時間があり、何らかの信頼性の高い進捗インジケータをフックする必要があります。

受け入れられた回答

はい、今すぐ確認しました - 上記のコメントに記載されています。これに対する解決策の1つは、カスケードを単純に切り替えてモデルを手動でトラバースし、明示的なSave()呼び出しを行うことです。

これはうまくいきますが、イベントを処理するだけのものではありません。それでも、NHibernateのgenuinデザインを考えると、どこかで傍受される可能性のあるイベントがあると確信しています。質問はちょうどその名前の下にあります。 ...私はここに誰かがもっと知っていることを賭ける。

また、パフォーマンスを向上させるために、異なるネットバッチサイズを経験し、定期的に/明示的にFlush()とClear()を呼び出すステートレスセッションを使用しました。詳細は以下の記事を参照してください。

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

お役に立てれば。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow