`
superxielei
  • 浏览: 261754 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

批量生产数据时,效率是关键.

    博客分类:
  • java
阅读更多

昨天被安排了一个任务,要生成抚顺地区所有的联通和移动的手机号,最后要随机导出,每50W一个文本.

开发思路是先找到所有的抚顺号段,然后生成号段下所有的手机号,最后随机导出成文本.

看了一下我们的数据库,抚顺地区所有的号段一共有32个(可能不够,不过我们的数据库里就这么多,酬和用吧.不少了.),每个号段下有10000个号,最近就是3200000个手机号..

生成号码不是难事.关键是生成代码以后,从数据库中取出320W数据,然后要随机排列输出,尝试了各种办法以后终于还是失败,总是会内存溢出,要不然就是效率太低..

晚上回家突然想到一个办法,我何必要最后随机抽出数据呢?为什么不直接就做出随机的数据呢?让数据在数据库中随机保存,然后之后分页查询,每次查询50W保存文件就OK了啊...早上到单位一试验果然有效..

首先是生成随机数据的地方.随机数据并不是说手机号码随机生成,如果随机生成号码还有验证是否重复很麻烦,直接随机生成主键ID,然后保存呵呵,一切OK.

int index = 0;
		int number = 0;
		String numberStr = "";
		String part = "";
		
		String pattern = "0000 "; 
		DecimalFormat df = new DecimalFormat(pattern); 
		
		Connection connection = ormDao.jdbcTemplate.getConnection();
		connection.setAutoCommit(false);  
		String sql = "insert INTO t_phonexy (id,phone,part,number,prefix) values (?,?,?,?,?)";  
		PreparedStatement prest = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		
		//生成4000000万个ID.使用LinkedList提高插入效率
		List<Integer> ids = new LinkedList<Integer>();
		while(number < 4000000){
			ids.add(number);
			number++;
		}
		//对400W个ID随机打乱随机.
		Collections.shuffle(ids);
		//将LinkedList转换为数组,提高取数据的效率
		Integer[] idss = new Integer[400000];
		idss = ids.toArray(idss);
		//记录取数索引
		int idsIndex = 0;
		
		for(index = 0 ;index<parts.length;index++){
			part = parts[index];
			number = 0;
			while(number < 10000){
				numberStr = df.format(number);
				//虽然这里是顺序取出,但是之前已经打乱过顺序,所以ID自然也是乱序的.
				prest.setInt(1,idss[idsIndex]);
				idsIndex++;
				prest.setString(2,part+numberStr);
				prest.setString(3,part);
				prest.setString(4,numberStr);
				prest.setString(5,part.substring(0, 3));
				prest.addBatch();
				
				number++;
			}
			prest.executeBatch();  
			connection.commit(); 
		}

 数据库MySql5.0  表类型MyISAM.只有主键索引.  耗时 :0时-9分-35秒

我又测试了一下,注释掉随机主键部分的代码,看看耗时是多少.耗时 :0时-8分-46秒

只慢了不到一分钟,只慢了49秒而已~~

剩下的工作就简单多了,取出数据,生成文件.

Class.forName("com.mysql.jdbc.Driver");
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xbexam?characterEncoding=UTF-8", "root", "123123");
//		Connection connection = ormDao.jdbcTemplate.getConnection();
		Statement statement = connection.createStatement();
		ResultSet resultSet = statement.executeQuery(sql);
		System.out.println("=====数据库访问结束=======");
		List<String> list = new LinkedList<String>();
		while(resultSet.next()){
			list.add(resultSet.getString("phone"));
		}
int count = 0;
		int fileCount = 0;
		while(iterator.hasNext()){
			if(count > 500000){
				//写出文件
				File file = new File("d:/"+fileCount+".txt");
				fileCount++;
				file.createNewFile();
				FileWriter fileWriter = new FileWriter(file);
				fileWriter.write(buffer.toString());
				fileWriter.flush();
				fileWriter.close();
				
				count = 0;
				buffer = new StringBuffer();
			}
			buffer.append(iterator.next()+"\r\n");
			count++;
		}
		
		//写出文件
		File file = new File("d:/"+fileCount+".txt");
		fileCount++;
		file.createNewFile();
		FileWriter fileWriter = new FileWriter(file);
		fileWriter.write(buffer.toString());
		fileWriter.flush();
		fileWriter.close();
 

生成文件..耗时 :0时0分-13秒...简直~~~简直~~

一切都搞定了..呵呵~~代码要留好,不一定什么时候还能用得上.

分享到:
评论

相关推荐

    智能加工生产线关键技术.pptx

    2.2智能加工生产线关键技术 1 智能加工生产线关键技术全文共17页,当前为第1页。 I ' 2.制造执行系统(MES) "客户需求 产品开发"d"产品生产 n 产品服务; 设计h生产m物流n 营销 制造体系纵向集成 P仙晌 Production ...

    数据治理-数据生命周期管理-大数据整合.pdf

    数据治理-数据⽣命周期管理-⼤数据整合 批量数据的整合 传统的数据整合⼀般采⽤ETL⽅式,即抽取(Elect)、转换(Transfer)、加载(Load),随着数据量的加⼤,以及数据平台⾃⾝数据处理 技术的发展,⽬前较为通⽤的⽅式...

    python批量新建工作簿.zip

    总之,Python批量新建工作簿.zip是一个强大的自动化工具,它不仅提高了工作效率,还确保了数据处理的准确性和一致性。对于需要管理大量Excel文件的用户来说,这个脚本无疑是一个宝贵的资源。重新回答||

    基于精准稽核的OLT业务数据自动清理支撑平台

    OLT作为承载光宽业务接入的关键局端设备,其业务数据维护质量与业务开通效率存在正相关,并间接影响售中、售后体验和企业精确管理效率。为提升数据质量和清理效率,开发OLT业务数据提质支撑平台,建立基于“正则式...

    大数据分析一体机.pptx

    关系图等 存储 结构化数据: 海量数据的查询、统计、更新等操作效率低 非结构化数据 图片、视频、word、pdf、ppt等文件存储 不利于检索、查询和存储 半结构化数据 转换为结构化存储 按照非结构化存储 解决方案: ...

    一种大数据智能分析平台的数据分析方法及实现技术.doc

    Spark Streaming将数据切分成片段,变成小批量时间间隔处理,Spark抽象一个持续的数据流 称为DStream(离散流),一个DStream是RDD弹性分布式数据集的micro- batch微批次,RDD是分布式集合能够并行地被任何函数操作...

    大数据测试——精选推荐.pdf

    当然在⼤数据测试时,功能测试和性能测试是同样很关键的。 对于⼤数据测试⼯程师⽽⾔,如何⾼效正确的验证经过⼤数据⼯具/框架成功处理过的⾄少百万兆字节的数据将会是⼀个巨⼤的挑战。 因为⼤数据⾼效的处理测试...

    python批量打开一个文件夹下的所有工作簿.zip

    5. 日志记录:为了方便后续的问题排查和数据分析,可以在代码中添加日志记录功能,将程序运行过程中的关键信息和异常情况记录下来,便于后期查看和分析。 总之,这个Python自动化办公源码可以帮助用户快速地批量...

    dataclassframe:具有多索引和批量操作的数据类的容器

    提供数据类的类型效益和人机工程学,同时具有的效率。 该容器基于通过优化存储数据的内存布局,提供快速的批量操作和较小的内存量(适用于大型集合)来实现。 使用Pandas可以进行批量操作,Pandas对于数​​字和...

    大数据概述——精选推荐.pdf

    ⼤数据计算模式: ⼤数据计算 模式 解决问题 代表产品 批处理计算 针对⼤规模数据的批量处理 MapReduce、Spark等 流计算 针对流数据的实时计算 Storm、S4、Flume、Streams、Puma、DStream、SuperMario、银河流 数据...

    厂管至尊-生产管理系统三用户版

    企业生产制造管理的关键在于如何规划和计划各种资源在时间、地点、产品之间的合理配备,如何按计划监督责任方对资源的使用情况,如何根据预测和历史情况为决策者提供更有效地利用资源的分析数据。 本系统的主要...

    智能制造系统MES简介.pdf

    OUT IN 设备参数 品检信息 测试结果 OUT 检验结果 IN TAG信息 MES主要功能 批量管制在制品模块 作业站信息收集模块 流程卡管理模块 作业警示模块 进料检验管理模块 设备综合效率模块 Real Time SPC 重工管理模块 ...

    大数据--第一章大数据概述笔记分享.pdf

    2、在思维⽅式⽅⾯,⼤数据完全颠覆了传统的思维⽅式: § 全样⽽⾮抽象 § 效率⽽⾮精确 § 相关⽽⾮因果 四、⼤数据的应⽤ 1、⼤数据⽆处不在 2、典型的⼤数据应⽤实例 1.影视剧拍摄 2.⾕歌流感趋势 五、⼤数据的...

    智能制造MES系统整体解决方案.pptx

    OUT IN 设备参数 品检信息 测试结果 OUT 检验结果 IN TAG信息 MES主要功能 批量管制在制品模块 作业站信息收集模块 流程卡管理模块 作业警示模块 进料检验管理模块 设备综合效率模块 Real Time SPC 重工管理模块 ...

    猪场管家6S v2.0.0.0.zip

    生产提示:对关键节点即时预警。 生产效率周/月报:全面展现猪场生产计划的进展情况。 成本精确核算:计算每头猪或猪群成本,可随猪只或猪群变动而转移。 绩效考核(联产计酬):数据说话,各岗位工作结果...

    基于SSM的基于数据元标准的教材征订管理系统.zip

    对系统关键模块进行了日志记录,以便在出现问题时进行追踪和排查。对系统进行了性能优化,提高了响应速度和并发处理能力。总之,本项目基于SSM框架实现了一个基于数据元标准的教材征订管理系统。通过合理地设计和...

    苏州智能工厂建设指南.doc

    2.1.1 生产排程柔性化 建立高级计划与排产系统(APS),通过集中排程、可视化调度及时准确掌握生产、 设备、人员、模具等生产信息,应用多种算法提高生产排程效率,实现柔性生产,全面 适应多品种、小批量的订单...

    MySQL性能优化详解.docx

    使用批量操作:对于大量数据的插入、更新或删除,使用批量操作可以减少I/O次数,提高效率。 监控和分析慢查询:开启慢查询日志,使用mysqldumpslow命令分析慢查询,找出并优化执行时间较长的SQL语句。 调整MySQL配置...

    php项目-php+mysql学生成绩查询系统(源代码+论文).rar

    3. 支持批量导入导出成绩数据,方便教师进行成绩录入与管理。 4. 提供权限控制功能,确保数据安全性和隐私保护。 5. 可二次开发定制,满足不同教育机构的特定需求。 论文内容涵盖: 1. 系统需求分析与设计原则。 2....

    2009 年度十大 SQL Server 技巧文章

    使用bcp工具导入和导出批量数据 微软SQL Server中的批量复制程序(Bulk Copy Program,BCP)能让数据库管理员将数据批量导入表中或将数据从表中批量导入文档中。它还支持一些定义数据如何导出、导入到什么地方、...

Global site tag (gtag.js) - Google Analytics