`
huzhiyong56
  • 浏览: 27638 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate遇到处理大数据的问题

 
阅读更多

       今天同事搞个东西,插入8000条数据,到了3000条就卡死了。。应该是session没释放,以下整理出出现该问题的解决方案。

      大批量的数据插入到数据库。数量级有万级、十万级、百万级、甚至千万级别的。如此数量级别的数据用Hibernate做插入操作,就可能会发生异常,常见的异常是OutOfMemoryError(内存溢出异常)。

     Hibernate插入操作的机制:Hibernate要对它内部缓存进行维护,当我们执行插入操作时,就会把要操作的对象全部放到自身的内部缓存来进行管理。
     Hibernate
的缓存:Hibernate有内部缓存与二级缓存之说。由于Hibernate对这两种缓存有着不同的管理机制,对于二级缓存,我们可以对它的大小进行相关配置,而对于内部缓存,Hibernate就采取了放任自流的态度了,对它的容量并没有限制。现在症结找到了,我们做海量数据插入的时候,生成这么多的对象就会被纳入内部缓存(内部缓存是在内存中做缓存的),这样你的系统内存就会一点一点的被蚕食,如果最后系统被挤了,也就在情理之中了

    处理这个问题的两种方案:

     1 优化Hibernate,程序上采用分段插入及时清除缓存的方法。

     2 绕过Hibernate API ,直接通过 JDBC API 来做批量插入,这个方法性能上是最 好的,也是最快的。
   
对于上述中的方法1,其基本是思路为:优化Hibernate,在配置文件中设置hibernate.jdbc.batch_size参数,来指定每次提交SQL的数量;程序上采用分段插入及时清除缓存的方法(Session实现了异步write-behind,它允许Hibernate显式地写操作的批处理),也就是每插入一定量的数据后及时的把它们从内部缓存中清除掉,释放占用的内存。 

    设置hibernate.jdbc.batch_size参数,可参考如下配置。 
    

<hibernate-configuration> 
<session-factory> 
......... 
<property name=” hibernate.jdbc.batch_size”>50</property> 
......... 
<session-factory> 
<hibernate-configuration> 

 

 

 

 

Session session=HibernateUtil.currentSession(); 
Transatcion tx=session.beginTransaction(); 
for(int i=0;i<10000;i++) 
...{ 
Student st=new Student(); 
st.setName(“feifei”); 
session.save(st); 
if(i%50==0) //以每50个数据作为一个处理单元 
...{ 
session.flush(); //保持与数据库数据的同步 
session.clear(); //清除内部缓存的全部数据,及时释放出占用的内存 
} 
} 
tx.commit(); 

 

分享到:
评论

相关推荐

    大数据学习所需基本知识以及搭建Hadoop大数据环境过程.docx

    熟悉Linux环境将有助于理解和配置大数据软件,如Hadoop、Hive、HBase和Spark等,减少遇到问题时的困扰。 在大数据框架部分,Hadoop生态系统是核心。Hadoop包含HDFS(分布式文件系统)、MapReduce(批量数据处理)和...

    hibernate动态映射表处理oracle的clob类型

    5. **性能优化**:处理CLOB时,需注意性能问题。例如,频繁读写CLOB可能导致性能下降,因此在设计系统时要考虑读写频率和数据量。 6. **示例代码**:在Hibernate中,读取和写入CLOB的代码可能如下: ```java // ...

    基于时态密集度特征的大数据高效迁移策略.pdf

    传统方法在处理大数据时,往往难以适应数据的高动态性特点,从而影响迁移效率。而新策略正是在总结传统方法的局限性上,引入了时态密集度这一新的维度,来优化数据迁移流程。 为了保证高效迁移,刘金魁强调了数据...

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    6. **Clob与Blob的对比**:尽管两者都是用来处理大数据,但Clob主要用于字符数据,Blob则用于二进制数据。在选择使用哪种类型时,应根据实际存储的数据类型来决定。 7. **事务管理**:处理Clob数据时,由于可能涉及...

    性能规模风险初评hibernate共4页.pdf.zip

    【标题】:“性能规模风险初评hibernate共4页.pdf.zip”这个文件名暗示了文档内容可能涉及对使用Hibernate框架进行系统开发时可能遇到的性能、规模和风险的初步评估。Hibernate是一个流行的Java对象关系映射(ORM)...

    hibernate-shards:Hibernate ORM的水平分区

    总结来说,Hibernate Shards是Java开发者处理大数据场景下的一种解决方案,虽然现在已被归档,但它背后的思路和技巧仍然值得借鉴。对于那些正在或即将面临大数据挑战的项目,理解并研究Hibernate Shards的工作原理,...

    java excel大数据量导出demo,可支持模板导出

    2. **分页查询**:为了处理大数据,通常会将数据分页处理,避免一次性加载过多数据。这可能涉及到数据库的分页查询,然后逐页导出到Excel。在Java中,这可以通过JDBC或者ORM框架如Hibernate、MyBatis来实现。 3. **...

    日语java面试问题集

    11. **项目经验与问题解决能力**:面试官会询问过去项目的经验,以及如何处理遇到的技术难题和团队协作问题。 12. **编码规范与代码质量**:良好的编码习惯、代码可读性、单元测试等。 13. **敏捷开发与项目管理**...

    面向银行的财务管理分析系统的设计与实现.docx

    综上所述,面向银行的财务管理分析系统通过结合现代信息技术,如大数据处理、分布式计算等,成功解决了银行在财务管理中遇到的难题,实现了财务精细化管理,提升了银行的运营效率。系统的稳定运行和业务需求的满足,...

    Java架构师需要具备的能力.pdf

    例如,在大数据时代,需要能够学习和掌握大数据处理技术,如 Hadoop、Spark 等,并能够合理地应用这些技术来解决问题。 五、知识基础 要想成为 Java 架构师需要具备以下知识基础: 1. 扎实的 Java 基础:需要能够...

    npoioioiiiii

    6. **版本更新与社区支持**:NPOI有持续的更新和维护,社区活跃,遇到问题时可以通过查阅官方文档或社区问答找到解决方案。 7. **示例代码**:使用NPOI的基本操作通常涉及打开文件、创建工作簿对象、添加工作表、...

    基于Java的超市系统设计与实现文献综述.pdf

    此外,系统的设计应考虑到数据备份、恢复策略以及系统的容错能力,以确保在遇到问题时能快速恢复正常运营。 总结来说,基于Java的超市系统设计与实现是一个涵盖了计算机科学、管理科学、信息科学等多个领域的综合性...

    MySQL数据库高性能处理开发实战指南70讲

    - **案例分享**:分享实际项目中遇到的问题及解决方案,加深理解。 以上是根据给定文件信息整理出的《MySQL数据库高性能处理开发实战指南70讲》各章节涉及的主要知识点。这些内容不仅涵盖了MySQL数据库的核心技术...

    平台运维工程师岗位职责.pdf

    - 配合解决运维工作中遇到的重大故障和性能瓶颈问题,快速定位问题并提出解决方案。 - 对运维规范、工作流程和应急预案进行优化,以提升问题解决速度。 3. **技术知识与技能要求**: - 拥有两年以上互联网运维...

    Java程序员面试宝典与习题

    面试时可能会遇到编码题,要求现场编写代码解决问题,因此熟悉算法和数据结构也是必不可少的。同时,了解一些最新的技术趋势,如微服务、容器化、云计算、大数据等,也能为面试加分。阅读和学习提供的《Java程序员...

    java必备知识点大全.pdf

    Ajax请求Session超时问题:Ajax请求可能会遇到Session超时的问题,需要特别处理。 Java线程池概述:Java线程池可以重用一组线程来执行多个任务,提高程序性能。 OSCache概述:OSCache用于将频繁访问的数据缓存在...

    2022年java工程师的试用期工作总结范文.docx

    - 遇到问题时,通过自我研究、咨询同事和查找资料来解决问题,展示了良好的问题解决技巧和自学能力。 - 对于未知领域的学习,如Ajax技术,体现了快速学习新技能的能力。 3. **个人成长**: - 明确岗位职责:理解...

    Spring Recipes, 3rd Edition 2014.10最新版本

    此外,书中还介绍了一些高级特性,比如使用Hadoop和MongoDB来处理大数据和云环境下的数据存储。 在Web开发方面,本书主要讨论了Spring MVC、动态脚本语言的集成、与Grails框架和Groovy语言的整合以及RESTful Web...

Global site tag (gtag.js) - Google Analytics