Hibernate和Jive缓存策略的比较

戒情ying

戒情ying

2016-02-19 12:31

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的Hibernate和Jive缓存策略的比较,手机电脑控们准备好了吗?一起看过来吧!

一.基本概念
  
  PO是持久化对象,它只是对物理数据实体的一种对象表示。
  
  VO是值对象,准确地讲,它是业务对象。
  
  FormBean只是Html表单的封装,起到在控制层弱化的request中存储数据的作用,将request的get方法转
  
  变为对象的存取值。

二.缓存策略比较

Jive
  
  1.Jive的缓存策略的过程描述:
  
  (1)条件查询的时候,Jive用 select id from table_name where …. (只选择ID字段)这样的SQL语句查询数据库,来获得一个ID列表。
  
  (2) Jive根据ID列表中的每个ID,首先查看缓存中是否存在对应ID的数据对象:假如存在,那么直接取出,加入到 结果列表中;假如不存在,那么通过一条select * from table_name where id = {ID value} 这样的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的数据对象即可。
  
  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)的数据对象,共用一个二级缓存(或其中的同一块)。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

Hibernate

1.Hibernate二级缓存策略的过程描述:
  
  (1)条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
  
  (2) 把获得的所有数据对象根据ID放入到第二级缓存中。
  
  (3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,假如配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
  
  (4) 删除、更新、增加数据的时候,同时更新缓存。
  
  2.Hibernate二级缓存策略的优点:
  
  (1) 具有Jive缓存策略同样的第(1)条优点:ID查询的时候,假如该ID已经存在于缓存中,那么可以直接取出。节省了一条数据库查询。
  
  (2) 不具有Jive缓存策略的第(2)条缺点,即hibernate不会有最坏情况下的 n + 1次数据库查询。
  
  3.Hibernate二级缓存策略的缺点:
  
  (1) 同Jive缓存策略的第(1)条缺点一样,条件查询的时候,第(1)步的数据库查询语句是不可少的。而且Hibernate选择所有的字段,比只选择ID字段花费的时间和空间都多。
  
  (2) 不具备Jive缓存策略的第(2)条优点。条件查询的时候,必须把数据库对象从数据库中整个取出,即使该数据库的ID已经存在于缓存中。
  
  Hibernate的Query缓存策略
  
  可以看到,Jive缓存和Hibernate的二级缓存策略,都只是针对于ID查询的缓存策略,对于条件查询则毫无作用。(尽管Jive缓存的第(2)个优点,能够避免重复从数据库获取同一个ID对应的数据对象,但select id from …这条数据库查询是每次条件查询都必不可少的)。
  
  为此,Hibernate提供了针对条件查询的Query缓存。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)


展开更多 50%)
分享

猜你喜欢

Hibernate和Jive缓存策略的比较

编程语言 网络编程
Hibernate和Jive缓存策略的比较

IE 缓存策略的BUG的解决方法

Web开发
IE 缓存策略的BUG的解决方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Hibernate的事务和并发02

编程语言 网络编程
Hibernate的事务和并发02

Hibernate的事务和并发01

编程语言 网络编程
Hibernate的事务和并发01

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

struts2+spring+hibernate分页代码[比较多]

Web开发
struts2+spring+hibernate分页代码[比较多]

视频缓存和网页缓存文件在哪

电脑入门
视频缓存和网页缓存文件在哪

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

可爱的动漫QQ分组设计_童年,那些抹不去的印记 - QQ非主流分组

可爱的动漫QQ分组设计_童年,那些抹不去的印记 - QQ非主流分组

sql语句的一些集合

sql语句的一些集合
下拉加载更多内容 ↓