(Свободно) События NHibernate для длительных транзакций?

event-listener fluent-nhibernate progress-indicator sqlbulkcopy

Вопрос

Мы подключили событие ISaveOrUpdateEventListener и надеемся, что мы можем привязать его к обновлению индикатора выполнения для каждого посещаемого узла во время обхода сохранения довольно большой модели, НО событие запускается только один раз, когда запускаются операции сохранения (только на узле на котором инициализирован Save (), а не на каких-либо подносах).

Есть ли другие события, которые более подходят для прослушивания?

Мы также попытались разбить операцию сохранения (иерархической модели), совершив сам обход, но это, похоже, еще более ухудшает производительность.

Возможно, мы пытаемся решить проблему, для которой FNH не предназначалось для использования. Мы новичок в этом.

Мы также создали альтернативное решение с использованием SqlBulkCopy, как рекомендовано в других местах.

Мы видели комментарии, что FNH в первую очередь предполагается для небольших транзакций (OLTP), а не тип исчерпывающей модели, к которой мы привязаны нашей проблемой (обработка сигналов огромными объемами данных).

Задний план:

Мы пытаемся использовать Fluent NHibernate в более крупном проекте базы данных с данными, собранными из довольно сложного анализа в реальном времени (высокочастотные, множественные входные сигналы, длительные эксперименты и т. Д.). В прототипе, который мы создали, мы видим довольно страшные времена ожидания на данный момент, и нужно зацепить какой-то надежный индикатор прогресса.

Принятый ответ

Да, теперь подтверждено - как упоминалось в моем комментарии выше. Одно (возможное) решение этого - просто превратить Каскады и провести обход модели вручную и сделать явные вызовы Save ().

Это работает, хотя это не так просто, как просто обработка события. Тем не менее, учитывая концептуальный дизайн NHibernate, я уверен, что есть где-то событие, которое может быть перехвачено - вопрос под каким-то именем. ... Держу пари, кто-то здесь знает больше.

Кроме того, для повышения производительности мы использовали сессию без статусов, экспериментировали с размером партии differnet и периодически / явно вызывали 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
Является ли этот КБ законным? Да, узнайте, почему