example - Hibernate & EHCache: ¿cómo funciona maxElementsInMemory?
ehcache spring (1)
Para el almacenamiento en caché de consultas, los resultados de cada resultado de consulta son una entrada en la región StandardQueryCache. Por lo tanto, su caché allí está configurado actualmente para almacenar en caché 10000 resultados de consultas diferentes en la región predeterminada / sin nombre. Las consultas configuradas para usar una región con nombre (Query # setCacheRegion) escriben en una región de caché diferente.
Estos resultados deben ser "invalidados" cada vez que se modifican los datos subyacentes. Ese es el propósito de UpdateTimestampsCache. Cuando Hibernate escribe en las tablas, ingresa entradas en UpdateTimestampsCache (este proceso solo se habilita cuando el caché de consultas está habilitado, ya que es parte explícita de la invalidación de estos resultados de consultas en caché). Al volver a leer los resultados de la consulta en caché, verificamos la marca de tiempo en caché con los resultados de la consulta en comparación con las marcas de tiempo de todas las tablas que utiliza para determinar si los resultados siguen siendo válidos. Es mejor no limitar esta región si es posible. Si lo necesita, el mejor número es el número de tablas en su modelo de dominio subyacente. De lo contrario, los resultados de la consulta en caché podrían comenzar a ser invalidados cuando no sea necesario. Es difícil imaginar que tienes 10000 mesas, así que probablemente estés bien allí.
He configurado EHCache con un DefaultCache (para elementos), un StandardQueryCache (para consultas) y UpdateTimestampsCache (para lo que creo es hacer un seguimiento de las actualizaciones de la base de datos ... pero realmente no obtengo lo que hace exactamente).
He establecido maxElementsInMemory para cada uno de estos cachés, pero lo que no entiendo es lo que este número controla para el StandardQueryCache y para el UpdateTimestampsCache. Entiendo que la cantidad de entidades que se pueden almacenar en la memoria caché predeterminada no debe exceder de 10000, pero la memoria caché de consulta no almacena los elementos. Almacena las claves primarias (hasta donde yo entiendo).
¿Esto significa entonces que maxElementsInMemory para StandardQueryCache controla el número de "filas" de los resultados, o controla el número de pares de claves primarias para los elementos que puede tener?
¿Qué pasa con el UpdateTimestampsCache? ¿Hace un seguimiento de la última vez que se actualizó una entidad, la última vez que se actualizó una tabla ... o algo más? ¿Qué número debo usar para maxElementsInMemory para este?
¡Gracias!
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600">
</defaultCache>
<cache
name="org.hibernate.cache.internal.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600">
</cache>
<cache
name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxElementsInMemory="10000"
eternal="true">
</cache>
</ehcache>