很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,那么就会认为ORM可能也不是非凡适合数据的批量处理。其实,我想假如我们应用得当的话,完全可以消除ORM批量处理性能问题这方面的顾虑。下面以Hibernate为例来做为说明,假如我们真的不得不在 Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据,用Hibernate可能像这样:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer); }
tx.commit();
session.close();
大概在运行到第50 000条的时候,
可能会出现内存溢出而失败。这是Hibernate把最近插入的Customer都以session-level cache在内存做缓存,我们不要忘记Hiberante并没有限制first-level cache 的缓存大小。
◆持久对象实例被治理在事务结束时,此时Hibernate与数据库同步任何已经发生变 化的被治理的的对象。
◆Session实现了异步write-behind,它答应Hibernate显式地写操作的批处理。 这里,我给出Hibernate如何实现批量插入的方法:
首先,我们设置一个合理的JDBC批处理大小,hibernate.jdbc.batch_size 20。 然后在一定间隔对Session进行flush()和clear()。
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) {
//flush 插入数据和释放内存:
session.flush(); session.clear(); }
}
tx.commit();
session.close();
那么,关于怎样删除和更新数据呢?那好,在Hibernate2.1.6或者更后版本,scroll() 这个方法将是最好的途径:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
ScrollableResults customers = session.getNamedQuery("GetCustomers")
.scroll(ScrollMode.FORWARD_ONLY);
int count=0;
while ( customers.next() ) {
Customer customer = (Customer) customers.get(0);
customer.updateStuff(...);
if ( ++count % 20 == 0 ) {
//flush 更新数据和释放内存:
session.flush(); session.clear(); } }
tx.commit(); session.close();
这种做法并不困难,也不算不优雅。请注重,假如Customer启用了second-level caching ,我们仍然会有一些内存治理的问题。原因就是对于用户的每一次插入和更新,Hibernate在事务处理结束后不得不通告second-level cache 。因此,我们在批处理情况下将要禁用用户使用缓存。
分享到:
相关推荐
标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...
"浅析遥感影像批量处理方法的实现" 本文介绍了遥感影像批量处理方法的实现,利用模型构建器和Python编程两种方法实现影像的批量裁剪和镶嵌。文章首先介绍了遥感影像的应用场景和数据处理的重要性,然后介绍了常见的...
本文档《物理实验数据处理常用方法浅析.pdf》中提到的几种常用数据处理方法包括:列表法、作图法、图解法、差分法和最小二乘法。下面将分别介绍这些方法的原理、操作步骤以及各自的优缺点,并探讨如何根据不同的实验...
石秀峰先生的“浅析数据质量管理体系与方法”深入探讨了如何构建有效的数据质量管理机制,确保数据的准确性、完整性、一致性、时效性和可用性。本文将围绕这个主题,结合Java编程语言,详细介绍数据质量管理的相关...
浅析线阵列CCD航摄仪成像机理及数据处理方法 本文主要介绍了线阵列CCD航摄仪的成像机理和数据处理方法。线阵列CCD航摄仪是一种特殊的摄像设备,具有独特的优势,在测绘遥感领域的应用越来越广泛。 一、成像机理 ...
本文旨在浅析在数据库管理系统中,如何有效进行大批量数据处理的优化技术。 首先,SQL(结构化查询语言)作为数据库管理系统的基础,是处理和查询数据库数据的主要手段。SQL的基本命令可以实现数据的增删改查,从而...
4. 多数据题型的处理方法:在面对题目中出现的多个数据时,需要学生辨别哪些是可用数据,哪些是多余或陷阱数据。去伪存真的能力对于正确解答问题至关重要。 5. 化学试题分析方法:化学试题的分析不仅仅是寻找直接的...
【浅析Authorware中的数据处理】 Authorware是一款流行的多媒体开发工具,因其强大的交互性而被广泛应用。然而,Authorware本身并不直接支持数据接口,不能直接处理数据。本文主要介绍了两种在Authorware中处理数据...
在Java的软件开发中,Hibernate是一个...总结起来,Hibernate虽然提供了面向对象的便捷操作,但在处理批量更新和删除时,可能需要结合JDBC API来优化性能。理解和掌握这些技巧对于开发高效、大规模的Java应用至关重要。
在炮兵情报数据处理中,无量纲化方法的选择是一项至关重要的任务,因为数据的准确性直接影响到战场决策的制定。炮兵情报数据处理涉及多种侦察手段获取的数据,如地面、航空、空间和网络侦查,这些数据类型复杂且冗余...
在数据入库和整改等内业操作中,传统的手工方法耗时费力,而快捷建库及数据处理系统通过自动化流程减少了大量的重复劳动,使数据处理过程更为高效。同时,系统还提升了数据处理的准确性,降低了因人工操作导致的错误...
《浅析影响GPS数据处理精度的因素》探讨了GPS技术在数据处理中精度受多种因素影响的问题,这些因素包括投影带和投影面的选择、不同解算软件的应用、采用不同模型进行改正以及起始数据的误差。文章指出,随着GPS技术...
### 浅析统计学与数据挖掘 #### 一、引言 随着信息技术的快速发展和大数据时代的来临,人类社会正面临着前所未有的数据洪流。在这个背景下,如何从海量数据中提取有价值的信息成为了研究的重点。统计学作为一门...
基于Hadoop的气象云储存与数据处理应用浅析 本文主要介绍了Hadoop架构的构成,并对Hadoop架构的MapReduce实现进行了详细的描述。同时,本文还开发出一个在Hadoop架构的基础上进行气象数值统计的实例,并根据这个...
根据所提供的文件信息,文章标题为《浅析等级折算工作中的数据处理》,文章内容围绕了在等级折算工作中如何进行数据处理,尤其强调了面积权重法的应用。下面是对这些知识点的详细说明: 首先,文章介绍了等级折算...
浅析地下管线综合管理信息系统管线数据处理工作 本文主要介绍地下管线综合管理信息系统的数据处理工作,以解决城市地下管线管理中存在的数据不完善、信息不畅通的问题。文章从地下管线的重要性和数据现状出发,介绍...
"ASP.NET编程知识:ASP.net处理XML数据实例浅析" 本文将对 ASP.NET 处理 XML 数据的方法进行详细的讲解和分析。XML 是一种可扩展的标记语言,具有很大的灵活性,它的主要作用是作为一种数据存储或者数据传输的工具...
文章接着提出使用Excel可以克服传统数据处理方法的不足,Excel作为一个电子数据表程序,它内嵌了许多实用功能,如函数和格式化操作、图表自动生成、宏语言和数据管理等。Excel在金融、管理、科研等领域扮演着重要...