`
zhouchaofei2010
  • 浏览: 1104576 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate插入100万条数据的性能

 
阅读更多

共插入1000000条,使用时间:24190172ms

 

约花费等于6小时40分,几乎从上班开始一直运行到下班结束!!

 

 

============================================

可能需要优化的地方

1、程序设置累计1000条时,往数据库插入数据。可以改为10000条。

 

 if(i%1000==0){

        session.flush();

        session.clear();

       

System.out.println("已插入"+i+"条,\t 进度:"+nt.format((double)i/(double)count));

       }

 

2、使用jdbc的批处理

 

3、在插入数据过程中,如果有连接对该表进行查询。则一次插入1000条数据竟然要4-5分钟,停止对该表的查询后,插入数据速度提升

 

4、为了防止一次失败导致全部失败的回滚操作。可以把100万条数据平均分成10,然后一次导入10万条以降低风险

 

5、就总结上面4条么 ?还有呢?

 

 

程序代码如下:

 

package com.gwideal.college.sitesearch.test;

import java.text.NumberFormat;
import java.util.Date;

import org.hibernate.CacheMode;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.gwideal.article.entity.Article;
import com.gwideal.cms.entity.CmsChannel;
import com.gwideal.cms.entity.CmsConfig;
import com.gwideal.cms.entity.ContentCtg;
import com.gwideal.college.sitesearch.lucene.LuceneCreateDocument;
import com.gwideal.college.sitesearch.util.HibernateUtil;
import com.gwideal.core.entity.Website;

public class AddData { 
	
	public static void main(String[] args) {
		
	     NumberFormat nt = NumberFormat.getPercentInstance();
		 nt.setMinimumFractionDigits(2);
		long start=System.currentTimeMillis();
		Session session =HibernateUtil.currentSession(); 
		Transaction tx =session.beginTransaction();
		int count=1000000;
		for(int i=0;i<count;i++){
		  Article article=new Article();
		  article.setAuthor("kevin");
		  article.setTitle("kevin_test_"+i);
		  article.setContent("" +
		  		"发展规划  按照规划,工程将分二期进行。   轨道交通13号线工程是上海市城市轨道交通路网规划中的一" +
		  		"条纵贯中心城区的“西北——东南”轴向的直径线,也是轨道交通路网中的一条重要的主干线。   " +
		  		"轨道交通13号线一期工程线路正线全长为全长16.4公里,起点为金运路站,经金沙江西路、金沙江路、长寿路" +
		  		"、天目西路、恒丰路、大田路、石门路,到达一期工程终点南京西路站。线路途经上海市嘉定、普陀、闸北、静安4" +
		  		"个行政管辖区。   轨道交通13号线一期工程共设14座车站,沿线与1、2、3、4、7、11、12号线及规划中的14、15、2" +
		  		"0、21共11条线、9座站换乘,其中三线换乘站3座,两线换乘站6座,全部为地下站,分别是金运路站、江桥站、丰庄站、祁" +
		  		"连山南站、真北路站、大渡河路站、金沙江路站(与3、4号线换乘)、隆德路站(与11号线换乘)、武宁路站、长寿路站(与7号" 
		  		+
		  		"线换乘)、江宁路站、汉中路站(与1号线、12号线换乘)、自然博物馆站、南京西路站(与2号线、12号线换乘)。   轨道交通" +
		  		"13号线一期工程设北翟路车辆基地1座(与2号线共享),设控制中心1座(与11号线共享)和变电所1座(与11号线共享),轨" +
		  		"道交通13号线一期西段(工程将于2012年年底首先开通)。   轨道交通13号线一期工程在2012年建成以后,将与同年建成的" +
		  		"11号线北段二期和12号线一起,形成总共13条线、237座车站、总长500公里运营里程的上海轨道交通基本网络,每天可接纳近8" +
		  		"00万人次,占全市公交出行总量的40%以上,大大方便了市民的交通出行,从而使上海的轨道交通跨入世界先进行列。   二期" +
		  		"由南京西路站延伸至张江路站,现阶段有消息指出计划于2015年左右开通。   横穿上海市中心   13号线是上海市城市轨道" +
		  		"交通路网中西北-东南的重要骨干线路,穿越嘉定、普陀、静安、闸北、再次来到静安、黄浦、和浦东新区等8个行政区,经过金鹤" +
		  		"公路、金沙江路、长寿路、天目西路、恒丰路、石门路、瑞金路、成山路、沪南路等客运交通走廊和大型客流集散点,串联城市总体规划" +
		  		"中的几个中心,如长风地区、华阳社区、江宁社区、不夜城综合开发区、太平桥二期和部分历史文化风貌保护区、世博会地区以及浦东的三" +
		  		"林、六里地区。   13号线全长33.6公里,均为地下线。31座车站分别为金运路站(换乘20号线)、江桥站、丰庄站、祁连山南路站(换乘" +
		  		"21号线)、真北路站、大渡河路站(换乘15号线)、金沙江路站(换乘3、4号线)、隆德路站(换乘11号线)、武宁路站(换乘14号线)、长寿" +
		  		"路站(换乘7号线)、江宁路站、汉中路站(换乘1号线、12号线)、自然博物馆站、 南京西路站(换乘2号线、12号线)、淮海中路站(换成14号" +
		  		"线)、新天地站(换乘10号线)、马当路站(换乘9号线)、卢浦大桥站、世博大道站、长清路站(换乘7号线)、成山路站(换乘8号线)、东明" +
		  		"路站(换乘6号线)、六里站、下南路站、北蔡站、绿川新村站、莲溪路站(换乘18号线)、华夏中路站(换乘16号线、中科路站、哥白尼路站和" +
		  		"张江路站,均为地下站。   据环评报告透露,13号线将分段修建,预计全线工程总投资为198.68亿元,2012年底将完成金运路站至金沙江路站" +
		  		"线路,设车站7座;2015年后年完成金沙江路路站至南京西路路站线路,再完成南京西路站至以张江路站。   世博专用线   十三号线其中三个" +
		  		"车站(卢浦大桥、世博园、长清路)三个全长约5公里的地铁隧道区间,属于2010年世界博览会的「世博专用线」(或称「" +
		  		"世博过江段」),计划2010年初提早投入运营,以便开幕前建成启用,作为世博园内专用轨道交通。在世博会期间此段线路" +
		  		"将不纳入轨道交通运营网络,而是凭世博会门票免费乘坐。 此区间由上海建工(集团)总公司于2007年3月以13.38亿元人民币" +
		  		"的投得建设权;工程竣工并试运营一年后,则会由招标人回购。   建设(规划)中换乘车站   金运路站 - 与二十号线换" +
		  		"乘   祁连山南路站 - 与二十一号线换乘   大渡河路站 - 与十五号线换乘   金沙江路站 - 与三号线及四号线换乘   隆" +
		  		"德路站 - 与十一号线换乘   武宁路站 - 与十四号线换乘   长寿路站 - 与七号线换乘   汉中路站 - 与一号线及十二号线换" +
		  		"乘   南京西路站 - 与二号线及十二号线换乘   淮海中路站 - 与十四号线换乘   新天地站 - 与十号线换乘   " +
		  		"马当路站 - 与九号线换乘   长清路站 - 与七号线换乘   成山路站 - 与八号线换乘   东明路站 - 与六号线换乘 " +
		  		"  莲溪路站 - 与十八号线换乘   华夏中路站 - 与十六号线换乘   轨道交通十三号线一期将于2012年12月28日试运" +
		  		"营,率先开通金运路站至金沙江路区间试运行   金沙江西路站   丰庄站   祁连山南路站(暂不开通,预计2013年开通)" +
		  		"   真北路站   大渡河路站(暂不开通,预计2014年开通)   金沙江路站(可换成3、4号线) " +
		  		
		  		"");
		  
		        CmsChannel channel=new CmsChannel();
		        channel.setId(1083l);
		        article.setChannel(channel);
		        article.setTplContent("/article/default/content_gg.html");
		        article.setSortDate(new Date());
		        article.setReleaseDate(new Date());
		        article.setReleaseSysDate(new Date());
		        article.setVisitTotal(1000l);
		        article.setVisitMonth(1000l);
		        article.setVisitToday(1000l);
		        article.setVisitWeek(1000l);
		        article.setVisitYear(1000l);
		        article.setVisitQuarter(1000l);
		        
		        article.setCheck(true);
		        article.setBold(false);
		        article.setCheckOpinion("1");
		        article.setCheckTime(new Date());
		        article.setCommentCount(3);
		        article.setCheckStep(2);
		        Website website=new Website();
		        website.setId(1l);
		        article.setWebsite(website);
		        CmsConfig config=new CmsConfig();
		        config.setId(1l);
		        article.setConfig(config);
		        
		        ContentCtg contentCtg=new ContentCtg();
		        contentCtg.setId(1l);
		        article.setContentCtg(contentCtg);
		        
		        article.setTopLevel(1);
		        
		       article.setHasTitleImg(false);
		       
		       article.setAllowComment(true);
		      article.setDraft(false);
		      article.setBold(false);
		      article.setRecommend(false);
		      article.setDisabled(false);
		      article.setReject(false);
		      article.setPageCount(10);
		      article.setStatDate(new Date());
		      
		        session.save(article);
		         
		        if(i%1000==0){
		        	session.flush();
		        	session.clear();
		        	
		           System.out.println("已插入"+i+"条,\t 进度:"+nt.format((double)i/(double)count));
		        }
		}   
		tx.commit();
		long end=System.currentTimeMillis();
		System.out.println("共插入"+count+"条,使用时间:"+(end-start)+"ms");
		HibernateUtil.closeSession() ;  
		        
	}

}
 

 

 

 

 

 

 

分享到:
评论

相关推荐

    hibernate入门数据简单插入

    标题"hibernate入门数据简单插入"指的是使用Hibernate框架进行数据库的基本操作,特别是数据的插入。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者在应用程序中处理数据库对象,而无需直接编写...

    Hibernate插入数据

    本篇将详细探讨“Hibernate插入数据”的相关知识点,结合学习心得,深入理解并掌握其核心原理与实践技巧。 首先,Hibernate通过对象关系映射(ORM)技术,将数据库表与Java类关联起来,使得数据库操作可以通过对象...

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

    在上述例子中,当尝试向数据库插入100,000条数据时,由于默认情况下Hibernate会将所有持久化对象保留在一级缓存中,随着数据量的增加,内存消耗也会迅速增长,最终导致内存溢出。因此,我们需要对一级缓存进行管理。...

    Hibernate插入数据-Eclipse

    最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助...在此谢谢各位!!

    Hibernate中大量数据的更新

    在这些场景中,如果使用传统的 INSERT 语句逐条插入数据,会导致性能下降和内存溢出问题。因此,使用批量更新机制可以大大提高性能和降低内存占用。 Hibernate 的批量更新机制 Hibernate 提供了两种批量更新机制:...

    springmvc+hibernate+poi实现mysql数据库简单操作以及导出excel功能

    在本项目中,我们主要探讨如何使用SpringMVC、Hibernate框架与Apache POI库来实现对MySQL数据库的操作以及数据导出为Excel的功能。这是一项常见的需求,在企业级应用开发中非常实用,尤其对于数据管理和报告生成场景...

    解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题

    在使用Hibernate进行数据库操作时,有时会遇到一个常见的问题,即当从数据库中查询Date类型的数据并由Hibernate返回时,发现结果中的时分秒部分不正确。这个问题通常源于多个因素,包括日期时间的序列化与反序列化...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    6. **测试与验证**:编写测试用例确保多数据源配置正确,能正常执行查询、插入等数据库操作。 在提供的`common-muldb-hb`和`common-muldb-mb`文件中,应该包含了完整的配置文件、实体类、Mapper接口和XML映射文件,...

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

    ### Hibernate使用缓存时的数据同步问题详解 #### 引言 在现代软件开发中,ORM框架如Hibernate被广泛应用于数据库操作,以简化Java应用程序与数据库之间的交互。然而,使用Hibernate时,缓存机制的合理配置对于...

    hibernate性能测试代码

    在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层数据访问。本话题将深入探讨“Hibernate性能测试代码”,以帮助我们理解如何有效地评估和...

    Hibernate性能优化研究.pdf

    然而,在实际应用过程中,如何有效地利用Hibernate来优化数据持久层的性能仍然是一大挑战。本文旨在通过对Hibernate的深入研究,探讨影响其性能的各种因素,并提出相应的优化策略。 #### 二、O/R Mapping及...

    hibernate对Blob类型字段进行数据添加.txt

    ### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...

    struts2+Hibernater+spring整合之插入数据

    对于数据插入,一般会在Service层编写插入数据的方法,该方法会利用Hibernate的Session接口,通过save()或saveOrUpdate()方法将Java对象持久化到数据库。在执行完数据库操作后,Service层方法通常会调用Session的...

    hibernate性能优化方案

    ### Hibernate性能优化方案详解 #### 一、引言 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,其高效性和灵活性受到众多开发者的青睐。然而,不当的设计和配置往往会导致性能瓶颈,严重影响应用程序...

    Hibernate数据持久化技术

    Hibernate是Java领域中最流行的ORM框架之一,它通过元数据来定义对象和数据库表之间的映射关系,使得Java对象可以直接被存储和检索,而无需编写大量的SQL语句。 在ORM中,POJO(Plain Old Java Object)是一个简单...

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

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

    Hibernate配置数据源.

    ### Hibernate配置数据源详解 #### 一、引言 在软件开发过程中,特别是涉及大量数据库交互的应用场景下,选择合适的数据源配置对于提高系统性能、稳定性具有重要意义。Hibernate作为Java领域内广泛使用的对象关系...

    配置hibernate数据源

    配置Hibernate数据源是一项基础而重要的任务,涉及在Java应用程序中集成和使用Hibernate框架以及MySQL数据库。以下内容旨在详细介绍如何在MyEclipse开发环境中配置Hibernate数据源,同时解释相关概念和步骤。 首先...

    Hibernate性能优化

    3. **批处理**:批量插入和更新数据,利用Hibernate的批处理功能,提高数据库操作效率。 五、事务管理优化 1. **合理划分事务边界**:根据业务逻辑划分事务大小,避免过大事务导致的性能问题。 2. **事务隔离级别...

Global site tag (gtag.js) - Google Analytics