`
hpjianhua
  • 浏览: 237496 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

Hibernate脏数据与数据缓存

阅读更多
Hibernate脏数据检查

何谓脏数据(Dirty Data)?
这里的"脏"可能有些误解,脏数据并不是说非废弃或者无用的数据,而是指一个数据对象所携带的信息发生了改变之后的状态.
事务提交时,HIbernate会对Session中的PO进行检测,判断那些发生了变化,并装发生变化的数据更新到数据库中.

脏数据的检查一般策略大致有下面两种:
数据对象监控
数据对象监控的实现方式,大体上是通过拦截器对数据对象的设值方法(setter)进行拦截,拦截器的实现可以借助Dynamic Proxy或者CGlib实现.一旦数据对象的设置方法被调用(通常这也意味着数据对象的内容发生变化),则将其标志为"待更新"状态,之后在数据库操作时将其更新到对应的库表.

数据版本比较
在持久层框架中维持数据对象的最近读取版本,当数据提交时数据与些版本进行比对
时,如果发生变化则将期同步到数据库相应的库表.
Hibernate采取的是第二种检查策略

数据缓存
概述
缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库与数据访问层之间,缓存(Cache)往往是提升系统性能的关键因素.

数据缓存策略
ORM数据缓存应包含以下几个层次的内容:
事务级缓存(Transaction Layer Cache)
应用级/进程级缓存(Application/Process Layer Cache)
分布式缓存(Cluster Layer Cache)
事务级缓存
这里的事务可能是一个数据库事务,也可能是某个应用级事务.对于Hibernate而言,事务级缓存是基于Session生命周期实现的.每个Session会在内部维持一个数据缓存,此缓存随着Session的创建(销毁)而存在(消亡),因此也叫Session Level Cache(也称内部缓存)

应用级缓存
此缓存可由多个事务(数据事务或者应用级事务)共享,事务之间的缓存共享策略与应用的事务隔离机制密切相关.在Hibernate中,应用级缓存在SessionFactory层实现,所有由此SessionFactory创建的Session实例共享此缓存,因此也称为SessionFactory Level Cache.

分布式缓存
分布式缓存由多个应用级缓存实例组成集群,通过某种远程机制(如RMI或JMS)实现各个缓存实例间的数据同步,任何一个实例的数据修改操作,将导致整个集群间的数据状态同步.
需要注意的是,如果当前的应用与其他应用共享数据库,也就是说,在当前应用过程中,其他应用可能同时更新数据库,那么缓存策略的制定就需要格外小心了,这种情况下,一般采取一些保守策略可能会更加稳妥.

Hibernate数据缓存
以Hibernate主义加以区分,Hibernate数据缓存可分为以下两个层次:
内部缓存(Session Level,也称一级缓存)
二级缓存(SessionFactory Level,也称为二级缓存)
Hibernate中,缓存将在以下情况中发挥作用:
通过主键id加载数据.这包括根据id查询数据的Session.load方法,以及Session.iterate等 批量查询方法(Session.iterate进行查询时,也是根据id在缓存 中查找数据,类似一个Session.load循环).
延迟加载

内部缓存
Session在内部维护了一个Map数据类型,些数据类型中保持了所有与当前Session相关联对象.
内部缓存正常情况下由Hibernate自动维护,如果需要手动干预,我们可以通过以下方法完成:
Session.evict
将某个特定的对象从内部缓存中清除
Session.clear
清空内部缓存

二级缓存
在引入二级缓存时,应该考虑以下问题:
数据库是否与其他应用共享
应用是否需要部署在集群环境中.

如果满足以下条件,将纳入缓存管理:
数据不会被第三方应用修改
数据大小(Data Size)在可接受的范围之内.
数据更新频率较低
同一数据可能会被系统频繁引用.
非关键数据(关键数据,如金融帐户数据)。

第三方缓存实现

Hibernate本身并未提供二级缓存的产品化实现,而是为众多的第三方缓存组件提供了接入接口,较常用的第三方组件有:1. JCS2. EHCache3. OSCache4. JBossCache5. SwarmCacheHibernate中启用二级缓存,需要在hibernate.cfg.xml配置hibernate.cache.provider_class参数,之后,需要在映射文件中指定各个映射实体(以及collection)的缓存同步策略。Hibernate提供了一下4种内置的缓存同步策略:1. read-only只读。对于不会发生改变的数据,可使用只读型缓存。2. nonstrict-read-write如果程序对并发访问下的数据同步要求不是非常严格,且数据更新操作频率较低,可以采用本选项,获得较好的性能。3. read-write严格可读写缓存。基于时间戳判定机制,实现了“read committed”事务隔离等级。可用于对数据同步要求严格的情况,但不支持分布式缓存。这也是实际应用中使用最多的同步策略。4. transactional事务型缓存,必须运行在JTA事务环境中。
分享到:
评论

相关推荐

    hibernate的_映射、三态、脏数据、Session缓存

    hibernate的_映射、三态、脏数据、Session缓存,一个高手的总结,个人觉得很厉害,和大家一起分享

    使用Hibernate缓存数据.ppt

    使用Hibernate缓存数据.ppt

    Hibernate 使用缓存时,数据同步问题

    Hibernate 使用缓存时,数据同步问题

    Hibernate缓存

    Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命中”),则就直接把命中的数据作为结果加以利用,避免的了建立数据库查询的性能损耗。...

    hibernate 3中的缓存小结

    l OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。 l SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。...

    Hibernate的缓存策略

    缓存是介于应用程序和物理数据之间的,其作用是为了降低应用程序对物理数据访问的频次从而提高应用系统的性能。缓存思想的提出主要是因为对物理数据的访问效率要远远低于对内存的访问速度,因而采用了将部分物理数据...

    Hibernate + EhCache 实现数据缓存的处理

    NULL 博文链接:https://llying.iteye.com/blog/492307

    Hibernate一级缓存和二级缓存【内附二级缓存数据存储结构】

    Hibernate一级缓存和二级缓存【内附二级缓存数据存储结构】

    详解Hibernate的缓存机制及其配置代码

    缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. Hibernate在查询数据时,首先到缓存中去查找,如果找到就...

    hibernate二级缓存

    Hibernate二级缓存 在一个数据库系统中,如果缓存设置的合适,那么可以极大的提高系统的效率,Hibernate作为一个ORM工具 提供了缓存的机制,包括一级(Session级)缓存和二级(SessionFactory级)缓存。这里主要...

    Hibernate缓存机制深入浅出

    Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。 其作用是减少访问数据库的频率,从而提高应用的运行性能

    hibernate查询与缓存

    Hibernate查询首先介绍get()和load()方法的区别:get()方法和load()方法的区别主要在于对二级缓存的使用上。load()方法会使用二级缓存,而get()方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。 get...

    hibernate缓存

    hibernate的缓存机制(redis,manmecache)一级缓存:session级别 二级缓存:sessionFactory级别 (数据量少,数据值固定,经常被访问的数据) 单个对象的缓存,查询缓存:

    Hibernate的缓存机制

    缓存(Cache )是计算机领域非常通用的概念。它介于应用程序和永久性数据存储...缓存中的数据是数据存储源中数据的拷贝,应用程序在运行时直接读写缓存中的数据,只在某些特定时刻按照缓存中的数据来同步更新数据存储源。

    Hibernate的缓存机制.docx

    1、事务范围(单Session即...在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.

    Java缓存框架Java缓存框架

    EhCache EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 主要的特性有: 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量...

    Hibernate缓存策略(一级缓存、二级缓存).docx

    Hibernate是一个持久化框架,经常需要访问数据库。如果我们能够降低应用程序对物理数据库访问的频次,那会提供应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序运行时先从缓存中读写数据。

    hibernate基础教程

    Hibernate中的缓存 Hibernate中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存...

    Hibernate 高级配置

    1)、触发器使session的缓存中的数据与数据库中的数据不一致 2)、session的update()方法盲目的激发触发器 2. Hibernate中的createQuery方法 1)、uniqueResult()方法,返回一个单个对象 2)、list()方法返回一个...

Global site tag (gtag.js) - Google Analytics