Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 用于频繁更改查询的缓存_Hibernate_Caching_Ehcache - Fatal编程技术网

Hibernate 用于频繁更改查询的缓存

Hibernate 用于频繁更改查询的缓存,hibernate,caching,ehcache,Hibernate,Caching,Ehcache,我们有一个web应用程序,它侦听web服务调用、构造查询、从数据库中提取数据并将结果发送回客户端。由于遇到一些性能问题,我们希望在服务器端缓存数据。查询非常复杂,涉及多个连接。数据库通过web应用程序之外的另一个应用程序进行更新。我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的,而且查询参数经常更改。我们可以在这里采用哪些缓存策略来提高性能? 注意:查询经过优化以获得更好的性能 我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的 如果不使用Hiber

我们有一个web应用程序,它侦听web服务调用、构造查询、从数据库中提取数据并将结果发送回客户端。由于遇到一些性能问题,我们希望在服务器端缓存数据。查询非常复杂,涉及多个连接。数据库通过web应用程序之外的另一个应用程序进行更新。我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的,而且查询参数经常更改。我们可以在这里采用哪些缓存策略来提高性能? 注意:查询经过优化以获得更好的性能

我认为我们不能使用EHCache,因为数据库不是通过同一个应用程序更新的

如果不使用Hibernate的API,Hibernate将无法在需要时使相关的二级缓存区域无效。但是您可以自己做(请参阅
SessionFactory
上的各种
execxxx
方法)。根据更新的频率,您可能仍然会获得好处

还要注意的是,EHCache只是其中一个二级缓存实现(无论您是否使用EHCache都不相关,而是使用与问题相关的二级缓存)

(…)和查询参数经常更改

那更烦人。对于频繁执行的查询(包括参数),使用查询缓存非常有效。如果重新执行给定的查询(包括参数)是不太可能发生的事件,那么您将不会从查询缓存中获得太多好处

在这种情况下,我可能会尝试使用
Query#iterate()
而不是
Query#list()
。后者返回的查询结果为
列表
,前者为:

作为结果返回的实体按需初始化第一个SQL查询仅返回标识符

如果与id对应的实体位于二级缓存中,这可能会提供更好的性能。如果不是这样,它的表现也不会更好

我们可以在这里采用哪些缓存策略来提高性能

我没有比上述建议更好的建议了。当缓存命中是一个可能的事件时,缓存工作

注意:查询经过优化以获得更好的性能

嗯。。。你什么意思?:)