读写文件

背景及木:现有数据1000w单表,为压力测试准备1亿条数据。

步骤:

1.将1000w条记录,除id外都导入到多个文件中:

//DELIMITER
DROP PROCEDURE if EXISTS createManyTable;
create PROCEDURE createManyTable()
BEGIN
DECLARE i int;
DECLARE fileName VARCHAR(30);
set i=1; while i<251
DO
SET fileName=CONCAT('f_log_',i,'.txt'); SET @STMT :=CONCAT("select `xx`,`xx`,`xx`,`xx`,.... into outfile 'temp/",fileName,
"' lines terminated by '\r\n' from `f_log` WHERE id>= ",40000*(i-1)," AND id< ",40000*i); PREPARE STMT FROM @STMT;
EXECUTE STMT; set i=i+1;
end while;
END;
//DELIMITER
CALL createManyTable();

2. 将上述多个文件合并到同一个文件,并且在第一列加入id列:

    public static void main(String[] args) throws IOException {
int i=10000000;
int step=40000;
File out=new File("E:/data/f_log_data.txt");
for(int k=1;k<251;k++){
File file=new File("E:/data/temp/f_log_"+k+".txt");
StringBuffer sb=new StringBuffer();
if(file.exists()){
sb=readFile(file,i+step*k);
writeFile(out,sb);
}
} } public static StringBuffer readFile(File file,int start) throws IOException{
StringBuffer sb=new StringBuffer();
BufferedReader reader=new BufferedReader(new FileReader(file));
String line=""; while(line != null){
line = reader.readLine();
if(line == null){
break;
}
if(line.trim().equalsIgnoreCase("")){
continue;
}
start++;
sb.append(start+"\t"+line.trim()+"\r\n");
}
reader.close();
return sb;
} public static void writeFile(File file,StringBuffer sb) throws IOException{
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
writer.write(sb.toString());
writer.close();
} public void writeFile11() throws IOException{ // TODO Auto-generated method stub
BufferedWriter writer = new BufferedWriter(new FileWriter(new File("D:/driver/data.txt"), true));
for(int i=0;i<1000000;i++){
if(i%10==0){
writer.write("赵"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}if(i%10==1){
writer.write("钱"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}
if(i%10==2){
writer.write("孙"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}if(i%10==3){
writer.write("李"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}
if(i%10==4){
writer.write("郑"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}if(i%10==5){
writer.write("吴"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}
if(i%10==6){
writer.write("周"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}if(i%10==7){
writer.write("王"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}
if(i%10==8){
writer.write("张"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}if(i%10==9){
writer.write("刘"+(i/10)+"\t"+ (int)(Math.random()*100)+"\n");
}
}
writer.close(); }

3. 将合并后的文件导入到数据表中:

load data local infile '/tmp/finance_log_data.txt' into table f_log(`id`,`xx`,
`xx`,.........................
);

注意事项:开始考虑使用存储过程来逐步导入到数据表中,但load data命令不能在存储过程中使用。

  另外,数据的合并也可以以shell脚本完成,但习惯使用java了,因此以java来完成,显得比较复杂。不过,可以随便复习一下java的读写文件,有算不错的经历。

Q&A

时间问题:生成1亿条数据(在有索引的情况下),用时3个小时。如果使用insert语句,估计会疯掉!

mysql 造1亿条记录的单表--大数据表的更多相关文章

  1. MySQL 快速构造一亿条记录的表

    在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:http://blog.csdn.net/mchdba/article/details/52938114,但是因为录入一亿表需要2 ...

  2. 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。

    清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引. 环境介绍  线上磁盘空间不足,truncate ...

  3. php实现只保留mysql中最新1000条记录

    这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  4. mysql中插入多条记录-微软批处理

    当向mysql中插入大量数据时,可以使用微软的批处理方式.这样可以防止内存溢出又提高了效率.我写了一个mysql中插入多条记录的例子.赋值代码可以直接使用. 1.首先需要添加两个dll MySql.D ...

  5. 关于mysql查询最近一条记录

    关于mysql查询最近一条记录 最近项目中遇到需要查询记录当前时间最近的一条记录的问题,开始感觉无从下手,后来逐步发现了三种解决方案. 下策——查询出结果后将时间排序后取第一条 select * fr ...

  6. Mysql大数据表优化处理

    原文链接: https://segmentfault.com/a/1190000006158186 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表 ...

  7. boost的asio接收单路大数据量udp包的方法

    开发windows客户端接收RTP视频流,当h264视频达到1080P 60fps的时候,按包来调用recvfrom的函数压力比较大,存在丢包的问题,windows的完成端口的性能效果当然可以解决这个 ...

  8. ClickHouse 对付单表上亿条记录分组查询秒出, OLAP应用秒杀其他数据库

    1.  启动并下载一个clickhouse-server, By default, starting above server instance will be run as default user ...

  9. 如何在十分钟内插入1亿条记录到Oracle数据库?

    这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能. -- Create table create table TMP_TEST_CHAS_LEE ( f01 VARCHAR ...

随机推荐

  1. ZooKeeper 配置注意事项 zoo.cfg

    一    平台 二    软件环境         1)  JDK 1.6 以上 (最好1.7 Hadoop 某一项安装时候需要 1.7)         2)  至少 3 个节点    (2m +1 ...

  2. vmware下minimum安装centos后配置网络

    原文出处:http://www.cnblogs.com/lanhj/p/3785553.html 昨晚用vmware安装centos时选择minimum安装,目的熟悉基本配置. 上来想yum一个vim ...

  3. 《R实战》读书笔记二

    第一章 R简单介绍 本章概要 1安装R 2理解R语言 3执行R程序 本章所介绍的内容概括例如以下. 一个典型的数据分析步骤如图1所看到的. 图1:典型数据分析步骤 简而言之,现今的数据分析要求我们从多 ...

  4. abap选择屏幕上的button

    1.背景:近期在看sap的一些abapDemo,看了一个比較好用的功能.分享一下.希望对用到的兄弟有帮助,主要功能是:在选择屏幕上弹出一个小窗体.放一些button在上面,触发不同button,会处理 ...

  5. UITextField监控文字变化方法

    项目里须要在不隐藏键盘的情况下.来更改button 的状态. 这里就是要对uitextfield监控.uitextfield继承于UIControl.所以能够 使用addTarget方法.详细例如以下 ...

  6. android 聊天室窗体

    public class MainActivity extends Activity { ScrollView scrollView; Button button; LinearLayout layo ...

  7. Protocol Buffers的基础说明和使用

    我们開始须要使用protobuf的原因是,在处理OJ的contest模块的时候,碰到一个问题就是生成contestRank的时候.须要存储非常多信息. 假设我们採用model存储的话,那么一方面兴许假 ...

  8. 关于nios 中printf 的问题

    在nios中,有printf的程序,在线调试没有什么问题,但是下到flash里面,程序跑了一段时间就死掉了!JTAG_UART是阻塞式输出,他只是将数据输出到buffer中,等待你上位机读取,当你的b ...

  9. ajax --- 解决ajax跨域请求导致session失效的问题

    起因:http是无状态的,因此我们通常需要用到cookie以及session来保存状态,session是在服务器端存储的,会和cookie一起使用,设置了session之后,会发送给浏览器一个cook ...

  10. AIX 系统补丁升级步骤

    AIX 系统补丁升级步骤   1.升级之前建议备份 rootvg (推荐) # smit mksysb   2.检查系统版本号 # oslevel -r   3.找到补丁光盘或者下载补丁,上传到服务器 ...