Подтвердить что ты не робот

Спящий режим: динамическое обновление динамической вставки - Эффективность

Использование динамического обновления или динамической вставки имеет положительный, хотя в целом незначительный только по производительности, что также упоминается http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/

Но в справочной документации упоминается, что это может иметь отрицательные эффекты производительности, как указано ниже в http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-class:

Хотя эти настройки могут увеличиваться в некоторых случаях они могут фактически снижают производительность в другие.

Можно ли предложить какой-нибудь пример/сценарий, в котором упоминается отрицательное влияние на производительность одного и того же?

4b9b3361

Ответ 1

Hibernate кэширует фактические строки SQL INSERT/SELECT/UPDATE для каждого, и очевидным преимуществом является то, что ему не нужно вычислять SQL, когда вы хотите сохранить, найти или обновить объект,

Однако при использовании динамической вставки или динамического обновления Hibernate должен каждый раз генерировать соответствующую строку SQL, и поэтому на стороне спящего режима есть производительность.

Другими словами, существует компромисс между накладными расходами на стороне базы данных и стороне Hibernate.

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

См. также

Ответ 2

Я думаю, что многие индексы также замедляют обновления и вставки, поэтому наряду с большими столбцами динамическое обновление должно быть хорошо для таблиц с большой шириной/содержанием в строке и многими индексами. Знаете, в "реальной жизни" базы данных не всегда с маленькими нормализованными таблицами...

Восстановление индексов на больших таблицах может занять гораздо больше времени, чем накладные расходы для создания и анализа SQL-запросов.

Ответ 3

Другая причина заключается в обновлении ранее отсоединенного объекта. Для этого для записи сначала необходимо извлечь запись из db, так как отдельный объект не находится в кеше сеанса. Следовательно, динамическое обновление в этом случае требует дополнительной поездки в оба конца для выполнения начальной выборки.