2012-01-20 23 views
14

Esta configuración de Hibernate debe controlar ostensiblemente cuántos objetos se almacenan en la memoria caché de primer nivel. La razón es fácil de entender, no queremos que se nos acabe la memoria.¿Cuál es el punto de especificar hibernate.jdbc.batch_size?

Pero algo me confunde. Todas las implementaciones que he visto, incluido this website , tienen un color y una eliminación explícitos. No hay problema, pero ¿cuál es el punto de la propiedad de configuración?

Nota: Estoy asumiendo que Hibernate supervisa el tamaño de la memoria caché y, si el número de objetos de un cierto tipo es mayor que el tamaño de la memoria caché, sincroniza la memoria caché con la base de datos. ¿No sabes si esa suposición es incorrecta?

Respuesta

21

Esta opción de configuración no tiene nada que ver con el tamaño de la memoria caché de primer nivel. Y descargar la sesión no elimina nada de la memoria caché. Escribe los cambios pendientes (inserciones, eliminaciones, actualizaciones) en la base de datos. El caché solo se borra cuando se llama explícitamente clear() o cuando se cierra la sesión. Si no borra o no especifica la sesión (o evist entidades específicas), la memoria caché seguirá creciendo y creciendo. Lo cual no es un problema, ya que generalmente es de corta duración (la duración de una transacción).

Las actualizaciones por lotes de JDBC permiten enviar múltiples consultas de actualización en un único lote a la base de datos. Reduce el número de llamadas de red. Puede verlo como cargando un archivo comprimido sin comprimir que contiene 20 archivos en lugar de enviar 20 archivos individualmente.

La confusión proviene del hecho de que las actualizaciones por lotes mencionadas en la página vinculada a su pregunta no tienen nada que ver con las actualizaciones por lotes de JDBC. Lo que Hibernate significa con las actualizaciones por lotes es "actualizaciones realizadas por un trabajo por lotes". Por lo general, un trabajo por lotes tiene transacciones mucho más largas que casos típicos de uso comercial, y actualiza cientos, miles o incluso más entidades en una sola transacción. Es por eso que Hibernate recomienda enjuagar y limpiar la sesión regularmente en este caso, para evitar quedarse sin memoria.

+0

Gracias que lo aclara. De alguna manera, estaba pensando que estaban relacionados, pero estas son optimizaciones separadas. –