`
hjy2099
  • 浏览: 255276 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Hibernate 处理大数据量的方案

阅读更多

大家知道,Hibernate 有 一级 cache (Session 级) 和二级 cache (需另外配置,如 ehcache),
以下代码,Hibernate 在处理到大约50000条记录时,就会抛出 OutOfMemoryException, 这是因为,Hibernate 把所有新建的 MiniMessage 对象都放在了 Session 级的缓存中了。

Session session = null;
Transaction tx = null;
try {     
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
for(int i=0; i<300000; i++ ) {          
 System.out.println(i + ".................");         
 MiniMessage message = new MiniMessage("Hello World" + i);        
 session.save(message);

      }
   
tx.commit();

} catch (HibernateException he) {  
tx.rollback();     
throw he;
} finally {       
session.close();
}

解决办法:


使用"批处理”(Batch process)

Session session = null;

try {
session = HibernateUtil.getSessionFactory().getCurrentSession();        
Transaction tx = session.beginTransaction();

       for(int i=0; i<200000; i++ ) {
 log.debug(i + ".................");

 MiniMessage message = new MiniMessage("Hello World" + (i+1));
 session.save(message);
 if ( i % 100 == 0 ) {
  //100, same as the JDBC batch size set in xml file:
  // <property name="hibernate.jdbc.batch_size">100</property>
  //flush a batch of inserts and release memory:
  log.debug("fulsh at : " + i + ".................");

  session.flush();
  session.clear();
 }
}

        
session.getTransaction().commit();
} catch (HibernateException he) {
      
session.getTransaction().rollback();
      
throw he;
}



在这种情况下,需要在hibernate.cfg.xml 配置几个参数来达到更好的效果:

1. 配置批处理的大小

 

 <property name="hibernate.jdbc.batch_size">100</property> 

 

2. 放弃二级缓存:

 

  <!-- Disable the second-level cache because the
batch process is one-off process. -->

   <property
name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>


   <property
name="hibernate.cache.use_second_level_cache">false</property>

   <property
name="hibernate.cache.use_query_cache">false</property>

   <property
name="hibernate.cache.use_minimal_puts">false</property>


这样,Hibernate 会在每 100 个插入后,与数据库同步一次,并将一级缓存中的实体对象清除。

分享到:
评论

相关推荐

    hibernate3源码

    Hibernate是一种Java语言下的对象...Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。

    Hibernate数据持久层框架是一种Java语言下的对象关系映射解决方案.rar

    Hibernate 是一种Java语言下的...Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。

    Hibernate逍遥游记.pdf

    《Hibernate逍遥游记》主要介绍通过Hibernate API来访问数据库的方法,还介绍把Java对象模型映射到关系数据模型的各种技巧、处理并发问题及实现对话的种种方案。《Hibernate逍遥游记》将帮助读者编写出具有合理的...

    hibernate-orm-5.6.3.rar

    Hibernate数据持久层框架是一种...Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。

    Java EE轻量级解决方案S2SH

    在Hibernate部分主要讲解O/R Mapping的设计理念,Hibernate对O/R Mapping的支持,Hibernate的配置及多种关系映射的实现,以及HQL查询数据。在Spring部分主要讲解IoC的原理,Spring对Bean的管理机制,Spring AOP编程...

    Hibernate数据持久层框架-其他

    Hibernate是一种Java语言下的对象...Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。

    基于Struts和Hibernate技术的企业管理信息系统研究与开发

    对象的思想来操作关系型数据库的各类数据,同时 Hibernate 还提供了灵活的事 务处理和查询机制。通过以上两个框架的整合应用,可以形成一个灵活、松耦 合和易于扩展维护的信息系统的完整解决方案。 本论文以江苏省...

    基于SSHI架构的开发平台技术方案

    基于J2EE平台软件的终级解决方案,采用最新的J2EE技术 平台特点思路:技术先进、架构安全、稳定、高效、易快速上手 底层为成熟的J2EE开源技术框架Spring3、Struts2、Hibernate3.6 数据访问层采用Hibernate 结合...

    java_jsp项目源码_网上订餐系统(struts+spring+hibernate).rar

    * 报表统计:管理员可以查看系统的各项统计数据,如销售额、订单量、用户活跃度等,以便进行数据分析和决策支持。 **项目优势:** 1. **高效的订餐流程:** 用户可以轻松地浏览菜品、下单并支付,无需担心线下...

    网站设计方案(完整版).doc

    XXX公司 XX发布平台 设计方案 XX单位 2022年12月 1、概述 阐述项目建设背景…… 项目必要性、先进性…… 2、建设目标 1、宣传公司、中心的管理理念,促进企业文化的建设与传播; 2、实现对外信息发布的信息资源分类...

    (jsp源码)轻松商城

    数据库采用MYSQL,数据源采用数据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的 封装性,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发,所有的繁重...

    jbpm开发工作流程管理

    BPM,全称是Java Business Process ...Hibernate是目前Java领域最好的一种数据持久层解决方案。通过Hibernate,jBPM将数据的管理职能分离出去,自己专注于商务逻辑的处理。 说不如做,下面做个例子感受以下吧。

    ibatis 开发指南

    系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高 度优化的SQL语句(或存储过程)才能达到系统性能设计指标。 面对这样的需求,再次举起Hibernate 大刀,却发现刀锋不再锐利,甚至无法...

    宿舍管理系统(ssh+jsp+mysql5.x)含文档

    系统后台选用了SSH框架来实现主要的业务逻辑,其中Struts2负责Web层的请求响应分发,Spring框架处理业务对象的生命周期及依赖关系,Hibernate用于对象关系映射和数据的持久化操作。前端采用了JSP技术结合JavaScript...

    jbpm4.4 resource-2

    jBPM,全称是Java Business ...Hibernate是目前Java领域最好的一种数据持久层解决方案。通过Hibernate,jBPM将数据的管理职能分离出去,自己专注于商务逻辑的处理。 http://zhidao.baidu.com/question/8510654.html

    NHibernate中文文档

    不仅仅管理.NET类到数据库表的映射(包括.NET 数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和ADO.NET处理数据的时间。 NHibernate的目标主要是用于与数据持久...

    SPRING2.0中文帮助文档

    例如,你可以利用控制反转容器在前台的展现层使用Struts,还可以只使用 Hibernate集成编码 或是 JDBC抽象层 去处理数据存储。Spring被设计成(并将继续保持)无侵入性的方式,意味着应用几乎不需要对框架进行依赖...

    Spring2中文参考手册

    例如,你可以利用控制反转容器在前台的展现层使用Struts,还可以只使用 Hibernate集成编码 或是 JDBC抽象层 去处理数据存储。Spring被设计成(并将继续保持)无侵入性的方式,意味着应用几乎不需要对框架进行依赖...

Global site tag (gtag.js) - Google Analytics