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

hibernate 处理百万级 数据

阅读更多
好些天了吧,没有写了!今天闲了,正好这两天也有收获特此一记!
先说需求吧,现在有这样一个文件,是txt 里面全部是纯数据。。。

数据格式如下:

01,02,03,04,05,06
02,03,04,05,06,07
03,04,05,06,07,08
.......
只有这一列。。。。也许第一行有可能重复 N 次 ,现在客户需要 找到这些数据里面每一组

数据只出现一次的.。 看到这里 也许 你已经有办法了,说用sql 语句直接查询统计就出来了

是的!你的想法是正确的,但是对于一个24M 的 txt 文件。。你如何让这些纯数据 添加到数据

库呢? 还有就是需求也还需要去查询 还有导出(txt格式 还是这个格式)!!!


先说我的思路:关于到读取文件 那就要用到IO 了。。。这里因为就只有一列数据而且每一列数据是一行所以我当时想到的就是使用  FileReader  调用里面的readLine() 方法

这样每次都能读取一行!!!

来看一段代码:

vo:
public class RedBall {

	private long id;
	private String redValue;
	public RedBall(){}
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getRedValue() {
		return redValue;
	}
	public void setRedValue(String redValue) {
		this.redValue = redValue;
	}
}

很简单 就是这样一个vo

接下俩看主要的东西  我是用了hibernate

public boolean save() throws IOException{
		boolean flag = false;
		Session   session = sf.openSession();
		tx = session.beginTransaction();
		int i = 0;
		if(!deleteDB()){
			return flag;
		}else{
			try{
				Reader reader     = new FileReader("d:/Data.txt");
				BufferedReader br = new BufferedReader(reader);
				String temp       = null;
				while((temp=br.readLine()) != null){
					RedBall redBall = new RedBall();
					redBall.setRedValue(temp);
					insertDB(redBall,session);
					i++;
					[color=red][i][b]if(i%10000 == 0){
						session.flush();
						session.clear();
					}[/b][/i][i][/i][/color]
				}
				flag = true;
				tx.commit();
				session.close();
			}catch(Exception e){
				flag = false;
				tx.rollback();
				session.close();
			}
		}
		return flag;
	}


请注意这里的红色字体!这是我修改只有的代码,到这里我说一下之前我的处理

我之前是吧tx.commit();session.close();放在insertDB(redBall,session); 这个方法里面的,结果效率 可想而知!!!

后来我仔细地想了想原因 觉得应该放在外面就像批量处理数据一样 这样的话 效率提高了。

之前呢 我没事做一个判断的if(i%10000 == 0) 有人可能会问你这么做是为了干什么?

我个人认为如果我们不清理内存呢中的数据 那么内存会溢出!事实证明了我的想法!

就要这么处理!这样一来 效率上来了 而且 内存溢出也解决了!!!

但是这样貌似还有点慢,我google 了一把发现完全可以通过一条sql 语句来吧文件导入到数据库表中的 (其实我用的数据库书mysql) ,当然这后来我发现的!

最后看一下使用数据库导入的代码:

Session  session = sf.openSession();
			tx = session.beginTransaction();
			String hql  = " load data local infile 'E:/XXX.txt' into table Insert_database fields terminated by '\t' lines terminated by '\r\n'";
			Query query = session.createSQLQuery(hql);
			try{
				query.executeUpdate();
				tx.commit();
				session.close();
				flag = true;
				
			}catch(Exception e){
				tx.rollback();
				session.close();
			}


这样的话文件的导入就很快了!!!但是我在想加入数据库 都不支持这种做法不知道有没有更好的方法去从一个txt中读出来元数据 并写入到数据库中!!!


分享到:
评论

相关推荐

    Hibernate下数据批量处理解决方案

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

    Hibernate中大量数据的更新

    Hibernate 中大量数据的更新 Hibernate 是一个流行的基于 Java 的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在将大量数据插入到数据库时,Hibernate 经常会出现性能和...

    hibernate一级缓存和二级缓存的区别与联系

    总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...

    在Java SE中使用Hibernate处理数据

    在Java SE环境中使用Hibernate处理数据是一项常见的任务,尤其是在开发企业级应用时,需要对数据库进行高效、灵活的管理和操作。Hibernate作为一个流行的Object-Relational Mapping(ORM)框架,能够简化Java程序员...

    hibernate保存不到数据1

    综上所述,当遇到Hibernate无法保存数据的问题时,应首先检查事务管理、配置、实体状态、数据库连接、映射、异常处理以及并发控制等方面,结合具体错误信息和日志进行调试。在实际开发中,为了遵循最佳实践,建议...

    Hibernate使用——自定义数据类型

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,通过面向对象的方式处理数据。在实际项目开发中,有时我们可能需要对数据库中的某些字段使用自定义的...

    hibernate5.1二级缓存包

    在 Hibernate 中,二级缓存是一个重要的性能优化工具,尤其是在处理大量数据或者高并发场景时。这个"hibernate5.1二级缓存包"应该包含了用于实现二级缓存的相关组件和配置。 二级缓存是相对于一级缓存(Session ...

    Hibernate 显示数据库数据

    【标题】"Hibernate 显示数据库数据" 在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以用Java对象来操作数据库记录。本教程针对初学者,将介绍如何使用...

    Hibernate4二级缓存实例(源码)

    1. **Hibernate二级缓存**:二级缓存是Hibernate在一级缓存(Session级别的缓存)之外提供的全局共享缓存,可以跨Session共享数据。它允许多个并发用户访问相同的数据,减少对数据库的访问次数,提高系统性能。 2. ...

    为Spring集成的Hibernate配置二级缓存

    在Java企业级开发中,Spring和Hibernate是两个非常重要的框架,Spring作为一个全面的轻量级容器,负责管理和协调各种组件,而Hibernate则作为持久层框架,处理数据库操作。当涉及到高性能、大数据量的应用时,二级...

    hibernate入门数据简单插入

    4. **持久化对象(POJO)**:Hibernate处理的对象被称为持久化对象,它们是普通的Java对象,但可以通过Hibernate的API与数据库进行交互。 5. **数据插入流程**:首先,创建SessionFactory,然后通过SessionFactory...

    Hibernate 使用缓存时,数据同步问题

    在使用Hibernate的缓存机制时,理解并妥善处理数据同步问题是至关重要的。通过合理配置缓存模式、适时清除缓存以及在必要时强制刷新数据,可以有效避免数据不一致的问题,保障应用程序的稳定性和数据的准确性。

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    二级缓存是ORM框架(如Hibernate)中的一个重要特性,它可以在数据库和应用程序之间存储经常访问的数据,以减少对数据库的直接访问,从而提高性能。通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    在Spring Boot 2.0中,开发人员常常需要处理多种数据源,比如在微服务架构中,不同的服务可能需要连接到不同的数据库。本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO...

    hibernate二级缓存

    Hibernate 二级缓存是一种高效的数据存储机制,它能够显著提升Web应用的性能,尤其是在处理大量数据流动时。缓存的主要目标是减少应用与数据库之间的交互次数,从而降低延迟并减轻数据库服务器的压力。在Hibernate...

    spring3+springmvc+jpa+hibernate多数据源

    在IT行业中,构建一个能够处理多种数据库的数据驱动...这样的设置对于处理多样化数据存储需求的企业级应用来说非常有价值。通过学习和理解这个项目的实现,开发者可以提升自己在分布式系统设计和数据管理方面的技能。

    配置hibernate数据源

    关于Hibernate的更多高级特性,例如二级缓存、拦截器和事件监听机制等,可以在学习Hibernate的官方文档或相关书籍中深入了解。通过上述步骤的详细讲解,希望读者能够掌握Hibernate数据源的配置方法,并成功应用于...

    Spring+Hibernate多数据源

    在IT行业中,尤其是在企业级应用开发中,Spring和Hibernate是两个非常重要的框架。Spring作为一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能,而Hibernate则是一个强大的对象...

    hibernate二级缓存示例源码

    然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate二级缓存的基本概念、工作原理及如何通过示例源码实现。 ### 1. 二级缓存概述 Hibernate的一级缓存是Session级别的...

    spring+hibernate+atomikos多数据源

    在IT行业中,构建一个能够处理多个数据库的数据源架构是常见的需求,特别是在大型企业级应用中。Spring、Hibernate和Atomikos的组合就是一种强大的解决方案,它们可以协同工作以支持多数据源的分布式事务处理。接...

Global site tag (gtag.js) - Google Analytics