关于hibernate数据分页时候的一点看法
用hibernat进行分页我们可以有两种分法,一种是首先查询出记录总数,然后再分页从数据库取值.还有一种就是直接把所有数据都取出,然后在前台或者是service中间分页.第一种方式我们就不谈了.说一下第二种.
这种方式分页,为了是页面显示的数据保持最新的状态,实际上每一次分页数据的请求都要再通过hibernate去数据库查询一次.但是由于hibernate由自己的缓存的关系,所以应该实际上的于数据库的交互量应该不是看起来的那么大.
而实际上估计大家在分页的时候都是选用第一种进行的分页.有没有人配合hibernate的缓存来使用过第二种得分页方式过?
我觉得在hibernate的缓存设置的好的前提下,第二种的配置方式对数据库的压力有可能更小一些.然后实际上服务器端的性能也更容易扩展一些,在这种情况下,固然hibernate的缓存多耗了应用服务器资源,但是整体性能应该能更好一些吧?
自己没有做过服务器相关的测试,倒是做了上述的web应用的例子,想自己测试一下.就是暂时还没有想到用什么工具和方法来测试比较好. 1 楼 ray_linn 2008-11-01 buaalijie 写道用hibernat进行分页我们可以有两种分法,一种是首先查询出记录总数,然后再分页从数据库取值.还有一种就是直接把所有数据都取出,然后在前台或者是service中间分页.第一种方式我们就不谈了.说一下第二种.
这种方式分页,为了是页面显示的数据保持最新的状态,实际上每一次分页数据的请求都要再通过hibernate去数据库查询一次.但是由于hibernate由自己的缓存的关系,所以应该实际上的于数据库的交互量应该不是看起来的那么大.
而实际上估计大家在分页的时候都是选用第一种进行的分页.有没有人配合hibernate的缓存来使用过第二种得分页方式过?
我觉得在hibernate的缓存设置的好的前提下,第二种的配置方式对数据库的压力有可能更小一些.然后实际上服务器端的性能也更容易扩展一些,在这种情况下,固然hibernate的缓存多耗了应用服务器资源,但是整体性能应该能更好一些吧?
自己没有做过服务器相关的测试,倒是做了上述的web应用的例子,想自己测试一下.就是暂时还没有想到用什么工具和方法来测试比较好.
the cache will not work unless you might load the objects by ID. 2 楼 buaalijie 2008-11-01 ray_linn 写道buaalijie 写道用hibernat进行分页我们可以有两种分法,一种是首先查询出记录总数,然后再分页从数据库取值.还有一种就是直接把所有数据都取出,然后在前台或者是service中间分页.第一种方式我们就不谈了.说一下第二种.
这种方式分页,为了是页面显示的数据保持最新的状态,实际上每一次分页数据的请求都要再通过hibernate去数据库查询一次.但是由于hibernate由自己的缓存的关系,所以应该实际上的于数据库的交互量应该不是看起来的那么大.
而实际上估计大家在分页的时候都是选用第一种进行的分页.有没有人配合hibernate的缓存来使用过第二种得分页方式过?
我觉得在hibernate的缓存设置的好的前提下,第二种的配置方式对数据库的压力有可能更小一些.然后实际上服务器端的性能也更容易扩展一些,在这种情况下,固然hibernate的缓存多耗了应用服务器资源,但是整体性能应该能更好一些吧?
自己没有做过服务器相关的测试,倒是做了上述的web应用的例子,想自己测试一下.就是暂时还没有想到用什么工具和方法来测试比较好.
the cache will not work unless you might load the objects by ID.
对,我就是把排序,条件检索之类的也挑了一部分到service中来做. 3 楼 风花雪月饼 2008-11-02 为了追求速度而提升服务器宕机的几率?
估计这个事情没几个人敢做,这就是为什么都用第一种的原因。 4 楼 EXvision 2008-11-08 Hibernate分页使用的是sql方言,物理分页,针对不同的数据库会有不同的优化。
iBatis是逻辑分页,效率会差一些。
所以尽情的用第一种方法吧。 5 楼 duduli 2009-03-04 第一种方法:内存消耗少点,但是对数据库的查询缺执行了2次,第一找到table中总数,第二次则是找到在那个范围中的数据段,次中方法适合用于数据总数不多的table。第二中方法完全是一内存为代价的,如果说数据字段多的话,而同时查询的人多的话,那么服务器肯定是吃不消的。但是其有点则是速度快,在数据库中只查询了一次,但是当数据字段多的时候则需要考虑用第一种方法了。