背景及目标:现有数据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 'rn' 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. 将上述多个文件扩充10倍并合并到同一个文件,并且在第一列加入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);

writeFile11(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()+"rn");

}

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一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?相关推荐

  1. mysql中用户权限的授予_如何在MySQL中创建用户和授予权限

    如何创建MySQL用户并授予权限?为了实现良好的安全性,需要为每个应用程序创建单独的用户帐户,而不是root用户访问数据库.这将确保应用程序无法访问其他应用程序的数据库.因此需要mysql管理员(ro ...

  2. mysql 中序号要怎么写_如何在mysql的字段ID中插入自动编号?

    如何在mysql的字段ID中插入自动编号?我已经有idmember作为主键 这是我尝试过的代码,请更正它 UPDATE member SET id = Row_number()over ORDER B ...

  3. mysql中季度表怎么出的_如何在mysql中生成季度报表和一年中每个季度的总和

    我想在mysql数据库中生成一个季度报告和一年中每个季度的总和. 我写了下面的查询,它不工作SELECT t.name as terminals, sum(bl.barrels_net_qty) as ...

  4. mysql schema 保存数据_如何在mysql数据库中保存apache spark schema输出

    任何人都可以告诉我,如果有任何方式在apache的火花存储在mysql数据库的JavaRDD?我从2个CSV文件中获取输入,然后在对其内容进行连接操作之后,我需要将输出(输出JavaRDD)保存在my ...

  5. mysql外键约束的作用_如何在MySQL中设置外键约束以及外键的作用

    1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表student,并添加各种约 ...

  6. mysql中datetime有带时区_如何在MySQL中存储datetime与时区信息

    我有成千上万的照片在坦桑尼亚拍摄,我想存储的日期和时间每张照片是在MySQL数据库.然而,服务器位于美国,当我尝试存储一个坦桑尼亚日期时间在Spring夏令时(在美国)的"无效"小 ...

  7. MySQL数据库中如何查询分组后每组中的最后一条记录

    MySQL数据库中如何查询分组后每组中的最后一条记录 方法一 select * from messages where id in (select max(id)fom messages group ...

  8. 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...

    MySQL 查询当天.本周,本月.上一个月的数据 mysql查询当天的所有信息: SELECT * FROM 表名 WHERE year(时间字段名)=year(now()) and month(时间 ...

  9. mysql 跨实例复制数据_社区投稿 | MySQL 跨实例 copy 大表解决方案

    作者简介 任坤,现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL.mongoDB 和 Redis 维护工作. 一.背景 某天晚上 20:00 左右开发人员找到我, ...

最新文章

  1. 语句覆盖(Statement coverage)
  2. mysql服务实例配置_MySQL多实例配置(一)
  3. java变量访问权限_JAVA成员变量的访问权限
  4. boost::errinfo_errno的用法测试程序
  5. 2018-03-26
  6. 书评:JBoss AS 7:配置,部署和管理
  7. 如何让tomcat服务器运行在80端口,并且无需输入项目名即可访问项目()
  8. ZooKeeper管理员指南
  9. 45岁,从中医转行云计算,年薪近百万...
  10. 清北学堂2019.5.3
  11. SCOM 2016 配置报警邮件 (下)
  12. git 远程代码回滚master
  13. (继续搬)struts日期格式的转换以及hibernate中session的关闭在xml中的配置
  14. Java程序练习-长整数加法运算
  15. Educational Codeforces Round 45 (Rated for Div. 2) G - GCD Counting
  16. 【高等数学】多元函数f(x,y...)的泰勒(Taylor)展开式
  17. 2020公务员考试应届毕业生的身份界定
  18. ibm刀片服务器系统瘫痪,ibm刀片服务器系统安装资料
  19. 理论算法两手抓,UIUC助理教授孙若愚60页长文综述深度学习优化
  20. NAS存储文件权限的设置方法

热门文章

  1. UnixLinux技术文章目录(2015-12-22更新)
  2. 计算机辅助制造期末试题答案,精编国家开放大学电大本科《机械CAD-CAM》2025期末试题及答案(试卷号:1119)...
  3. Jqgried树形列表
  4. RedisTemplate在项目中的应用
  5. Java反射机制概念及应用场景
  6. Android 人脸识别进行实名验证demo
  7. android 日期选择器
  8. 支付宝后台如何查看自己的签约详情
  9. 鲲鹏920 centos7 postgresql12 postgis2.5.4编译
  10. ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作