`
zznj1123
  • 浏览: 124060 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于hibernate缓存机制的查询性能优化研究(二)

阅读更多

1.2 hibernate缓存机制
  Hibernate提供了两种缓存,第一种是Session的缓存,又称为一级缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。如图1所示:
  图1 hibernate的二级缓存结构图
  第二种缓存是SessionFactory的缓存,又可以分为两类:内置缓存和外置缓存。SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。
  SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。
  
本文原文
  由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此第二级缓存是进程范围或者集群范围的缓存。二级缓存将由从属于本SessionFactroy的所有Session实例共享,因此有时成为SessionFactory Level Cache。这个缓存中存放的对象的松散数据。第二级对象有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。缓存适配器(Cache Provider)用于把具体的缓存实现软件与Hibernate集成。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。
  Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
  1.4 二级缓存应用策略。
  二级缓存在一个SessionFactory中有效,是优化的重中之重,因此,各类策略也考虑的较多,但是并非所有的情况都适合于使用二级缓存,需要根据具体情况来决定。同时可以针对某一个持久化对象配置其具体的缓存策略。
  适合于使用二级缓存的情况:
  (1)数据不会被第三方修改;
  一般情况下,会被hibernate以外修改的数据最好不要配置二级缓存,以免引起数据不一致问题。但是如果此数据因为性能的原因需要被缓存,同时又有可能被第三方比如SQL修改,也可以为其配置二级缓存。只是需要在sql执行修改后手动清除cache,以保证数据的一致性。
  (2)数据大小在可接收范围之内;
   如果数据表数据量特别巨大,不适合配置二级缓存。原因是缓存的数据量过大可能会引起内存资源紧张,反而降低性能。
  如果数据表数据量特别巨大,但是经常使用的只是较新部分的数据,也可以为其配置二级缓存。但是必须单独配置其持久化类的缓存策略,比如最大缓存数、缓存过期时间等,将这些参数降低至一个合理的范围(太高会引起内存资源紧张,太低了缓存的意义不大)。
  (3)数据更新频率低;
   对于数据更新频率过高的数据,频繁同步缓存中数据的代价可能和从查询缓存中的数据获得的好处相当,坏处益处相抵消。此时缓存的意义也不大。
  (4)非关键数据(不是财务数据等)
   财务数据等是非常重要的数据,绝对不允许出现或使用无效的数据,所以此时为了安全起见最好不要使用二级缓存。
  
  2 基于缓存的优化策略
  
  =查询性能往往是一个系统性能表现的重要方面。相对数据库的更新、删除操作而言,查询机制的优劣很大程度决定了系统的整体性能。
  2.1 查询缓存的应用
  对于经常使用的查询语句,如果启用了查询缓存(Query Cache),当第一次执行查询语句时,hibernate会把查询结果存放在第二级缓存中。以后再执行该查询语句时,只需从缓存中获得查询结果,从而提高性能。
  查询缓存策略的一般过程如下:
  (1)Query Cache保存了之前查询执行过的Select SQL以及结果集等信息,组成一个Query Key。Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows)等。
  (2)当再次遇到查询请求的时候,就会根据Query Key 从Query Cache找,如果存在就返回这个结果列表;如果不存在,查询数据库获取结果列表,把整个结果列表根据Query Key放入到Query缓存中。
  (3)但是两次查询之间,数据表发生数据变动的话,Hibernate就会自动清除Query Cache中对应的Query Key。
  为了启用Query Cache,我们需要在hibernate.cfg.xml中进行配置,参考配置如下(只列出核心配置项):

分享到:
评论

相关推荐

    HIBERNATE的缓存机制

    Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,显著提升了数据读取和写入的速度。这主要是因为从缓存中读取数据比从数据库中获取更...

    Hibernate一级缓存、二级缓存以及查询缓存实例

    在Java的持久化框架Hibernate中,缓存机制是优化数据库操作性能的重要手段。本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始...

    hibernate缓存机制分析共17页.pdf.zip

    《Hibernate缓存机制详解》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是优化性能的关键组成部分,它减少了对数据库的直接访问,提高了数据处理效率。本文...

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对数据库的直接访问。缓存分为两层:第一级缓存和第二级缓存。 第一级缓存是Hibernate的Session缓存,它是内置的,无法卸载,因此被...

    Hibernate的缓存级联查询

    总的来说,尽管Hibernate的使用场景可能不像过去那么广泛,但其提供的对象关系映射、缓存机制和查询优化策略仍然是理解现代数据库操作和Java开发中的宝贵知识。了解并掌握这些技术,可以帮助开发者编写出更高效、更...

    4.Hibernate-04查询以及优化策略1

    Hibernate 提供了多种缓存机制,例如一级缓存、二级缓存和查询缓存等。这些缓存机制可以显著地提高查询性能。 4.2 优化 HQL 查询 HQL 查询可以通过使用索引、限制查询范围和使用 Lazy Initialize 来优化。 4.3 ...

    Hibernate一级缓存和二级缓存

    描述中提到的链接可能是对Hibernate缓存机制的详细技术博客,但具体内容未给出。因此,我们将基于常规的Hibernate缓存知识进行解释。 **一、Hibernate一级缓存** 一级缓存是每个Hibernate Session内的缓存,它是一...

    Hibernate缓存机制

    ### Hibernate缓存机制详解 #### 一、Hibernate缓存机制原理及配置 **1.1 Hibernate缓存概述** Hibernate作为一款流行的Java持久层框架,其缓存机制是提高应用程序性能的关键之一。缓存的主要作用在于减少数据库...

    hibernate 缓存机制

    Hibernate的缓存机制是优化应用程序性能的关键组成部分,它通过存储数据副本减少对数据库的直接访问,从而提升系统响应速度。缓存主要分为两类:一级缓存(Session缓存)和二级缓存。 一级缓存是Hibernate的核心...

    Hibernate的缓存机制

    Hibernate 是一个流行的 Java 框架,用于简化对象关系映射(ORM)处理,它提供了一种高效的数据缓存机制,以提高应用程序的性能。本文将深入探讨 Hibernate 的缓存机制,包括其两个级别——一级缓存和二级缓存,并...

    Hibernate的缓存机制.docx

    Hibernate的缓存机制是优化数据库访问性能的关键组成部分。在Hibernate中,缓存主要分为三个层次:一级缓存、二级缓存以及集群范围的缓存。 一级缓存,也称为Session缓存,存在于单个Session实例中。其目的是减少对...

    hibernate一级和二级缓存配置与详解

    在Java持久化框架Hibernate中,缓存机制是一个重要的性能优化手段,它能够显著减少数据库的访问次数,提高应用程序的运行效率。本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级...

    基于Hibernate的在线考试优化设计与实现

    通过对在线考试系统进行基于Hibernate的优化设计与实现,可以有效地解决高并发情况下系统性能的问题。利用数据库连接池技术和Hibernate二级缓存机制,不仅能够提高系统的响应速度和稳定性,还能够显著提升用户体验。...

    铁路客票系统中缓存机制的应用模型研究.pdf

    通过深入研究Hibernate缓存机制,并结合铁路客票系统的业务特性,构建适合的缓存应用模型,可以显著提高售票速度,提升旅客满意度。同时,还需要持续关注和解决缓存应用中可能出现的问题,以确保系统的稳定性和高...

    Hibernate教程25_Hibernate缓存

    **标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...

    hibernate缓存解析

    总结,Hibernate缓存机制是提升系统性能的重要手段,通过一级缓存减少数据库交互,二级缓存提供跨Session的数据共享,查询缓存则进一步优化了重复查询的效率。理解和充分利用这些缓存策略,能有效优化基于Hibernate...

    hibernate二级缓存java包下载

    在 Hibernate 中,缓存机制是提高性能的重要工具,尤其是在处理大量数据时。二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识...

    基于Hibernate的效率查询的研究和应用.pdf

    ### 基于Hibernate的效率查询的研究和应用 #### 摘要 本文详细探讨了当前流行的Hibernate映射框架,并结合某通信企业的电子运行维护系统(E2OMS)的实际开发过程,提出了一个基于Hibernate的数据持久层解决方案。该...

    Hibernate缓存管理.doc

    【Hibernate缓存管理】是数据库持久化框架Hibernate中优化性能的关键技术。缓存的主要目的是减少对数据库的直接访问,提高应用程序...理解并有效利用Hibernate缓存机制,能显著提升数据库操作的性能,减少数据库负载。

Global site tag (gtag.js) - Google Analytics