在实际的开发中,当我们遇到百万条以上的数据呢?比如要一次保存10万条的数据,按照我们正常的思维来,应该这么写:
session.beginTransaction();
for(int i = 0,i<=100000,i++){
TUser user = new TUser();
session.save("user No:"+i);
}
session.getTransaction().commit();
但是这样一来有什么问题呢?程序肯定会以OutOfMemoryError异常而终止!为什么会这样?原因是Hibernate在每次调用session.save()时,都会将此对象纳入自身的内部缓存进行管理,内部缓存(一级缓存)与二级缓存不一样,二级缓存可以设置指定其中的最大容量,但内部缓存并没有这样的限制;
一次加入1百万数据,随着循环,内存会被耗尽,便产生了OutOfMemoryError异常;
如何解决这样的问题?
String sql = "insert into TUser(name) values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i=0,i<1000000,i++){
ps.setString(1,"user "+i);
ps.addBatch();
}
int[] counts = ps.executeBatch();
这里的ps.addBatch()方法,将数个SQL操作批量提交获得性能上的提升;
session.beginTransaction();
for(int i=0,i<1000000,i++){
TUser user = new TUser();
user.setName("user:"+i);
session.save(user);
if(i%25 == 0){
session.flush();
session.clear();
}
}
session.getTransaction().commit();
阶段性的调用session.clear();这样的话,可以将内部缓存(一级缓存)所占用的空间维持在一个合理的范围内;
但是这样的话,导入时,是个相当耗时的过程,然而还得在进行判断,效率的低,可想而知;这时,Hibernate给我们提供了更好的解决方案:
<property name="hibernate.jdbc.batch_size">25</property>
这样的话,就设定了Hibenrate每次提交SQL的数量;
分享到:
相关推荐
在IT行业中,数据库管理和高效的读写操作是至关重要的任务,特别是在处理海量数据时。本话题主要探讨了如何利用C#编程语言以及Hibernate ORM框架,在SQL Server数据库上实现快速的存储和检索。以下是对这些关键知识...
ORM的优势在于提供了一个简单而统一的API,且能够存储海量数据并支持大规模查询。然而,它也有不足之处,例如,开发效率和维护效率相对较低,且开发难度较大,代码量大。持久化对象通常是普通的Java对象(POJO),这...
在处理海量数据时,Hibernate作为一款强大的ORM框架,其默认机制并不适合直接处理大量记录,因为这可能导致内存消耗过大和性能下降。以下是针对Hibernate批量处理海量数据的一些关键知识点和优化策略: 1. **理解...
Mycat的核心功能包括数据分片、读写分离、故障切换等,使得系统能够处理海量数据并保证高可用性。 接下来,我们将讨论Hibernate与Mycat的集成。在Java应用中,Hibernate通过ORM(对象关系映射)技术将数据库操作...
- **对象序列化**:适合小规模数据处理,效率低且不适合大量数据操作。 - **关系型数据库**:适用于企业级应用需求,特别是: - 海量数据存储。 - 大规模查询及报表生成。 - 确保数据完整性、一致性和安全性。 ...
Hibernate Search是Hibernate ORM框架的一个强大扩展,它将全文搜索功能引入到Java应用中,使得开发者能够轻松地实现对数据库中海量数据的高效检索。在这个5.5.5.Final版本中,我们看到一个稳定且成熟的解决方案,...
例如,Spring可以作为整体应用的管理和控制层,使用Hibernate来处理数据库操作,Quartz负责定期执行如数据导入、分析等任务,而HDFS则用于存储海量数据。这样的架构在大数据场景下,如日志分析、实时监控或在线广告...
Hibernate Search是Java世界中Hibernate ORM框架的一个强大扩展,它将全文搜索能力引入到持久化层,使得开发者能够轻松地在数据库中的数据上执行复杂的全文检索。本文将详细探讨Hibernate Search 4.1.1.Final版本的...
### 如何构建海量数据应用的关键知识点 #### 一、精简架构的重要性 在构建海量数据应用时,精简架构显得尤为重要。精简架构不仅能够提高系统的性能和稳定性,还能简化维护工作,降低出错率。 - **避免过度使用框架...
- **支持海量数据处理**: 对于大量数据的存储、检索和报表生成,持久化是必不可少的。 #### 二、实现对象持久化的方法 - **对象序列化**: - 优点: 实现简单。 - 缺点: 不支持检索、不适用于大量数据存储。 - ...
在当今的Web应用中,全文检索功能已经成为不可或缺的一部分,尤其是在海量数据的场景下,高效的检索机制对于提升用户体验至关重要。Hibernate Search就是为此目的而生的,它将强大的全文搜索引擎Lucene与ORM框架...
1. 大数据处理:对于需要处理海量非结构化数据的应用,如日志分析、推荐系统等,Hibernate OGM能有效简化开发流程。 2. 社交网络:如用户关系图、好友推荐等功能,使用对象图数据库可以更好地表示和处理。 3. 分布式...
为了进一步提升系统的效能,可以考虑引入大数据处理技术,如Hadoop或Spark,以应对海量数据的处理和分析。同时,结合云计算技术,提升系统的可扩展性和弹性,以适应未来可能的增长。此外,增加机器学习算法,实现...
可能使用Spring框架进行依赖注入和事务管理,Hibernate或MyBatis用于数据库操作,可能还涉及消息队列(如RabbitMQ或Kafka)来处理数据流,以提高系统的异步处理能力和可扩展性。 1. Spring框架:提供了一个全面的...
Hibernate4是Java领域广泛使用的ORM(Object-Relational Mapping)框架,它可以将数据库操作转化为对Java对象的操作,降低了数据层的复杂性。通过配置XML或注解,Hibernate可以自动建立对象与数据库表之间的映射,...
【大学大数据分析平台设计与实现】的毕业设计项目旨在构建一个高效、实用的大数据分析平台,以应对当前海量数据处理的挑战。此项目不仅涉及到技术应用,还包括了前期调研、目前成果展示以及对未来的展望。 一、前期...
尽管如此,理解Hibernate Shards的工作原理和它在Java开发中的应用仍然是一个有价值的课题,特别是对于那些处理海量数据并寻求优化数据库性能的开发者来说。 Hibernate是一个强大的Java对象关系映射(ORM)框架,它...
云服务器层利用大数据技术和分布式服务器设计模式存储海量的医疗数据,以确保信息的全面性。移动医疗服务层通过高性能服务器对数据进行处理,并建立初始数据挖掘规则,向云服务器层发出数据访问请求。患者则可以通过...
常见的关系型数据库如MySQL、Oracle、SQL Server等,它们遵循结构化查询语言(SQL)进行数据操作。非关系型数据库如MongoDB、Redis等则适用于处理非结构化或半结构化数据。 数据库中的数据通常以表格的形式存在,...