网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用本地引用提高EJB访问效率.
.J2EE综合:业务逻辑和数据库的访.
.深入探讨SQL Server 2000对XML的.
.几个实用的Servlet应用例子-入门.
.Java Applet给ActiveX跪下了.
.在Java applet中如何实现一个模式.
.循速渐进学用Session Bean(三).
.使用jmx对weblogic进行动态的配置.
.关于可扩展的web架构设计的探索-.
.利用HttpSessionListener统计在线.
.Java.io彻底研究.
.tomcat中文问题--过滤器.
.一个表达式计算案例的设计和实现.
.为Web应用程序创建测试用例的办法.
.经典java问题,你能答出几个?.
.超级简单的sqlmap工具(ajf sql m.
.java多线程数据库操作.
.用Flash远程调用增强J2EE表示层.
.基于Nokia S40的猜数字游戏之一.
.NetBeans 5 正式版发布.

Hibernate和Jive缓存策略的比较

发表日期:2008-1-5


一.基本概念

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)的数据对象,共用一个二级缓存(或其中的同一块)。

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缓存。


上一篇:JAVA编程规范 人气:843
下一篇:J2SE中的序列化之接受默认序列化 人气:498
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐