hibernate / JPA中基于缓存和基于查询的分页的混合

时间:2016-02-16 10:03:24

标签: java hibernate jpa memcached hazelcast

如果结果集很大,那么将整个结果集放在内存中(服务器缓存,例如淡褐色)将不可行。使用大型结果集时,您无法将它们放在内存中。在这种情况下,您必须一次获取一块数据(基于查询的分页)。使用基于查询的分页的缺点是,对于多个页面请求,将有多次调用数据库。

任何人都可以建议如何实现它的混合方法。 我还没有把任何示例代码放在这里,因为我认为问题更多的是关于逻辑而不是特定代码。如果你需要示例代码,我可以把它放进去。

提前致谢。

1 个答案:

答案 0 :(得分:1)

最有效的解决方案是使用主键作为分页标准。这使我们能够依赖第一类构造,如区间查询,这对于RDBMS来说很容易优化,查询实体的主键最多可能已被编入索引。

使用主键上的范围查询检索数据分为两步。首先必须检索主键集合,然后生成间隔以正确识别数据的正确子集,然后对数据进行实际查询。

这种方法几乎与蛮力版本一样快。内存消耗约为十分之一。通过为此实现选择适当的页面大小,您可以更改执行时间和内存消耗之间的比率。此版本也是无状态的,它不会像ScrollableResults版本那样保留对资源的引用,也不会像使用setFirstResult/setMaxResult的版本一样使数据库紧张。

Effective pagination using Hibernate