`
PanShuiHua
  • 浏览: 30363 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate批量处理如何做到性能优化

阅读更多

Hibernate批量处理其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想,在笔者的实际使用中采用下面的三种优化方案的数据是:100000条数据插入数据库,主流台式机的配置,需要约30分钟,总结下来有三种来处理以解决性能问题:
1
:绕过Hibernate API ,直接通过 JDBC API 来做,这个方法性能上是比较好的,也是最快的。(实例为 更新操作
Transaction tx=session.beginTransaction(); //
注意用的是hibernate事务处理边界
Connection conn=session.connection();
PreparedStatement stmt=conn.preparedStatement("update CUSTOMER as C set C.sarlary=c.sarlary+1 where c.sarlary>1000");
stmt.excuteUpdate();
tx.commit(); //
注意用的是hibernate事务处理边界
这小程序中,采用的是直接调用JDBC API 来访问数据库,效率很高。避免了Hibernate 先查询出来加载到内存,再进行操作引发的性能问题。
2
:运用存储过程。但这种方式考虑到移植和程序部署的方便性,不建议使用.(实例为 更新操作)如果底层数据库(如Oracle)支持存储过程,也可以通过存储过程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在Oracle数据库中可以定义一个名为batchUpdateCustomer()的存储过程,代码如下:
代码内容create or replace procedure batchUpdateCustomer(p_age in number) as 
begin 
update CUSTOMERS set AGE=AGE+1 where AGE>p_age; 
end; 
以上存储过程有一个参数p_age,代表客户的年龄,应用程序可按照以下方式调用存储过程:
代码内容
tx = session.beginTransaction(); 
Connection con=session.connection(); 
String procedure = "{call batchUpdateCustomer(?) }"; 
CallableStatement cstmt = con.prepareCall(procedure); 
cstmt.setInt(1,0); //
把年龄参数设为0 
cstmt.executeUpdate(); 
tx.commit(); 
从上面程序看出,应用程序也必须绕过Hibernate API,直接通过JDBC API来调用存储过程。
3
:还是用Hibernate API 来进行常规的批量处理,可以也有变,变就变在,我们可以在查找出一定的量的时候,及时的将这些数据做完操作就删掉,session.flush();session.evict(XX对象集); 这样也可以挽救一点性能损失。这个一定的量要就要根据实际情况做定量参考了。(实例为 保存操作)
业务逻辑为:我们要想数据库插入10 0000 条数据
tx=session.beginTransaction();
for(int i=0;i<100000;i++)
{
Customer custom=new Customer();
custom.setName("user"+i);
session.save(custom);
if(i%50==0) //
以每50个数据作为一个处理单元,也就是我上面说的一定的量,这个量是要酌情考虑的
{
session.flush();
session.clear();
}
}
这样可以把系统维持在一个稳定的范围....

分享到:
评论

相关推荐

    Hibernate3性能优化 Hibernate_regerence3.12

    的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...

    浅析Hibernate下数据批量处理方法.doc

    不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到...

    Hibernate实战(第2版 中文高清版)

     10.1.2 Hibernate应用程序中的事务   10.1.3 使用Java Persistence的事务   10.2 控制并发访问   10.2.1 理解数据库级并发   10.2.2 乐观并发控制   10.2.3 获得额外的隔离性保证   10.3 非事务数据...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到...

    低清版 大型门户网站是这样炼成的.pdf

    5.9 hibernate应用的性能优化 336 5.10 多数据源的应用 338 5.11 jdbc的应用 343 5.12 hibernate调用存储过程 343 5.13 xml数据持久化 346 5.14 小结 348 第6章 充分利用spring 2.5的ioc利器统管bean世界 349 ...

    Java Web程序设计教程

    第10章hibernate性能优化 208 10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1...

    《深入浅出MyBatis技术原理与实战》高清完整PDF下载

    当前已经是移动互联网时代,Java持久框架Hibernate没有办法适应高性能,灵活,大数据,可优化等要求,这时MyBatis就进入了我们的视野,随着移动互联网应用的持续发酵,Spring MyBatis的应用已在Java互联网平台上得到...

    (高清+目录)深入浅出MyBatis技术原理与实战.zip

    当前已经是移动互联网时代,Java持久框架Hibernate没有办法适应高性能,灵活,大数据,可优化等要求,这时MyBatis就进入了我们的视野,随着移动互联网应用的持续发酵,Spring MyBatis的应用已在Java互联网平台上得到...

    WODECMS开源内容管理系统 v1.1.zip

    7 优化了权限批量生成缓存没更新的问题 8 修复了新闻发布和编辑默认栏目选中的问题 WODECMS开源内容管理系统主要特色点 多站点及分站 站群支持,模块化;支持多个站点,多站只需绑定域名到根目录,可以一个虚拟...

    亿美内容管理系统 ExmayCMS v1.1.5 Beta.zip

    ExmayCMS采用Struts2 Spring Hibernate Lucene3 EhCache Freemarker JQuery等主流技术架构,默认使用MySQL数据库,并支持Oracle、SqlServer、Sybase、DB2等主流数据库,全部源代码永久开放,无任何功能限制。...

    亿美内容管理系统 ExmayCMS v1.1.5 Beta.rar

    ExmayCMS采用Struts2 Spring Hibernate Lucene3 EhCache Freemarker JQuery等主流技术架构,默认使用MySQL数据库,并支持Oracle、SqlServer、Sybase、DB2等主流数据库,全部源代码永久开放,无任何功能限制。...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题75:批量插入几百万条数据.mp4 │ Java面试题76:有没有使用过redis.mp4 │ Java面试题77:redis的使用场景.mp4 │ Java面试题78:redis存储对象的方式.mp4 │ Java面试题79:redis数据淘汰机制.mp4 │...

    JAVA上百实例源码以及开源项目

    内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...

    JAVA上百实例源码以及开源项目源代码

    内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...

Global site tag (gtag.js) - Google Analytics