Hibernate和Jive缓存策略的比较
一.基本概念
PO是持久化对象,它只是对物理数据实体的一种对象表示。
VO是值对象,准确地讲,它是业务对象。
FormBean只是HTML表单的封装,起到在控制层弱化的request中存储数据的作用,将request的get方法转
变为对象的存取值。
织梦好,好织梦
二.缓存策略比较
Jive
1.Jive的缓存策略的过程描述:
(1)条件查询的时候,Jive用selectidfromtable_namewhere….(只选择ID字段)这样的SQL语句查询数据库,来获得一个ID列表。
(2)Jive根据ID列表中的每个ID,首先查看缓存中是否存在对应ID的数据对象:假如存在,那么直接取出,加入到结果列表中;假如不存在,那么通过一条select*fromtable_namewhereid={IDvalue}这样的SQL查询数据库,取出对应的数据对象,放入到结果列表,并把这个数据对象按照ID放入到缓存中。
(3)ID查询的时候,Jive执行类似第(2)步的过程,先从缓存中查找该ID,查不到,再查询数据库,然后把结果放入到缓存。
(4)删除、更新、增加数据的时候,同时更新缓存。
2.Jive缓存策略的优点:
(1)ID查询的时候,假如该ID已经存在于缓存中,那么可以直接取出。节省了一条数据库查询。
(2)当多次条件查询的结果集相交的情况下,交集里面的数据对象不用重复从数据库整个获取,直接从缓存中获取即可。比如,第一次查询的ID列表为{1,2},然后根据ID列表的ID从数据库中一个一个取出数据对象,结果集为{a(id=1),b(id=2)}。下一次查询的ID列表为{2,3},由于ID=2的数据对象已经存在于缓存中,那么只要从数据库中取出ID=3的数据对象即可。 内容来自dedecms
3.Jive缓存策略的缺点:
(1)在根据条件查找数据对象列表的过程中,DAO的第(1)步用来获得ID列表的那一次数据库查询,是必不可少的。
(2)假如第(1)步返回的ID列表中有n个ID,在最坏的命中率(缓存中一个对应ID都没有)情况下,Jive还要再查询n次数据库。最坏情况下,共需要n 1数据库查询。
Hibernate
Hibernate用Session类包装了数据库连接从打开到关闭的过程。Session内部维护一个数据对象集合,包括了本Session内选取的、操作的数据对象。这称为Session内部缓存,是Hibernate的第一级最快缓存,属于Hibernate的既定行为,不需要进行配置。
Session的生命期很短,存在于Session内部的第一级最快缓存的生命期当然也很短,命中率自然也很低。当然,这个Session内部缓存的主要作用是保持Session内部数据状态同步。假如需要跨Session的命中率较高的全局缓存,那么必须对Hibernate进行二级缓存配置。一般来说,同样数据类型(Class)的数据对象,共用一个二级缓存(或其中的同一块)。 织梦好,好织梦
Hibernate 本文来自织梦
1.Hibernate二级缓存策略的过程描述:
(1)条件查询的时候,总是发出一条select*fromtable_namewhere….(选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
(2)把获得的所有数据对象根据ID放入到第二级缓存中。
(3)当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,假如配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
(4)删除、更新、增加数据的时候,同时更新缓存。
2.Hibernate二级缓存策略的优点:
(1)具有Jive缓存策略同样的第(1)条优点:ID查询的时候,假如该ID已经存在于缓存中,那么可以直接取出。节省了一条数据库查询。
(2)不具有Jive缓存策略的第(2)条缺点,即hibernate不会有最坏情况下的n 1次数据库查询。
文章评论
共有位Admini5网友发表了评论 查看完整内容