Hibernate和Jive缓存策略的比较

2016-02-19 12:31 7 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

二.缓存策略比较

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

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

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


来源:http://www.tulaoshi.com/n/20160219/1601084.html

延伸阅读
标签: 电脑入门
先来了解教电脑缓存的工作原理? 电脑缓存是当cpu在读取数据的时候,先是从缓存文件中查找,然后找到之后会自动读取在输入到cpu进行处理,当然如果没有在缓存中找到对应的缓存文件的话,那么就会从内存中读取并且传输给cpu来处理。当然这样的话需要一定的时间所以会很慢。等cpu处理之后,就很贵把这个暑假所在的数据块保存在缓存文件中,这样的...
转自: http://www.qqread.com/mysql/z442108305.html 对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL和SQLServer。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用sql来访问这两种数据库的数据,因为它们都支持ansi-sql。 还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。...
在经验丰富的 Java 开发人员看来,.NET 可能与 Java 平台很相似,它们都提供了一种创建应用程序的结构化方法,都有编译为中间代码的语言,都为应用程序开发提供了一个大型 API 库。但实际上,.NET 的核心有一套与 Java 平台不同的目标。 从概念上讲,Java 是两样东西:Java 平台(运行时和 API)和 Java 语言。Java 平台的用途是支持用 Java ...
标签: 电脑入门
本文着重讲述了为什么要使用 Hibernate ,此外也简单的介绍了如何使用Hibernate,以及Hibernate中的一些基本概念。借这篇文章来向还没有接触过Hibernate的开发者推荐款优秀的开源ORM产品。 一、WhyHibernate? 现在流行测试驱动开发,相似的我觉得目的驱动学习是一种比较好的接受新技术,新知识的途径。在学习一样新的技术之前,首先得明确到...
示例数据表:team(班级)、certificate(身份证)、student(学生) Team.hbm.xml ?xml version="1.0" encoding="utf-8"? !DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" !--     Mapping file autogenerated by MyEclipse...

经验教程

829

收藏

16
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部