读书人

批量生产数据时,效率是要害

发布时间: 2012-12-21 12:03:50 作者: rapoo

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

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

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

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

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

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

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

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秒...简直~~~简直~~

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

读书人网 >编程

热点推荐