共插入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() ; } }