update some only fields dynamicupdate java performance hibernate orm

java - some - jpa update entity



Hibernate: dynamic-update dynamic-insert-Efectos de rendimiento (3)

El uso de dynamic-update o dynamic-insert es positivo, aunque en general es leve solo en el rendimiento, como también se menciona en http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/

Pero la documentación de referencia menciona que esto podría tener efectos negativos en el rendimiento también como se menciona a continuación en http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-class :

Aunque estas configuraciones pueden aumentar el rendimiento en algunos casos, en realidad pueden disminuir el rendimiento en otros.

¿Alguien puede sugerir algún ejemplo / escenario que mencione el impacto negativo en el rendimiento del mismo?


Creo que muchos índices también ralentizan las actualizaciones e inserciones, por lo que, junto a las columnas grandes, la actualización dinámica debería ser buena para tablas con gran ancho / contenido por fila y muchos índices. Ya sabes, en la "vida real", las bases de datos no siempre son pequeñas tablas normalizadas ...

La reconstrucción de índices en tablas grandes puede llevar mucho más tiempo que la sobrecarga para crear y analizar consultas SQL.


Hibernate almacena en caché las cadenas de SQL INSERT / SELECT / UPDATE reales para cada entidad y el beneficio obvio es que no tiene que calcular el SQL cuando desea persistir, encontrar o actualizar una entidad.

Sin embargo, cuando se utiliza la inserción dinámica o la actualización dinámica, Hibernate tiene que generar la cadena SQL correspondiente cada vez y, por lo tanto, hay un costo de rendimiento en el lado de Hibernate.

En otras palabras, hay una compensación entre los gastos generales en el lado de la base de datos y en el lado de Hibernate.

Mi punto de vista es que la inserción dinámica y la actualización dinámica pueden ser interesantes para las tablas con una columna de manchas gruesas o tablas con una gran cantidad de columnas. En otros casos, no estoy convencido de que la inserción o actualización dinámica siempre signifique un aumento del rendimiento (no los uso de forma predeterminada). Pero como siempre, debes medirlo.

Ver también


La otra razón es cuando se actualiza un objeto previamente separado. Para que funcione, primero se debe buscar el registro desde la base de datos, ya que un objeto separado no está en el caché de la sesión. Por lo tanto, la actualización dinámica en este caso requiere un viaje de ida y vuelta adicional para realizar la recuperación inicial.