mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?
背景及目标:现有数据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亿条记录的大容量数据表?相关推荐
- mysql中用户权限的授予_如何在MySQL中创建用户和授予权限
如何创建MySQL用户并授予权限?为了实现良好的安全性,需要为每个应用程序创建单独的用户帐户,而不是root用户访问数据库.这将确保应用程序无法访问其他应用程序的数据库.因此需要mysql管理员(ro ...
- mysql 中序号要怎么写_如何在mysql的字段ID中插入自动编号?
如何在mysql的字段ID中插入自动编号?我已经有idmember作为主键 这是我尝试过的代码,请更正它 UPDATE member SET id = Row_number()over ORDER B ...
- mysql中季度表怎么出的_如何在mysql中生成季度报表和一年中每个季度的总和
我想在mysql数据库中生成一个季度报告和一年中每个季度的总和. 我写了下面的查询,它不工作SELECT t.name as terminals, sum(bl.barrels_net_qty) as ...
- mysql schema 保存数据_如何在mysql数据库中保存apache spark schema输出
任何人都可以告诉我,如果有任何方式在apache的火花存储在mysql数据库的JavaRDD?我从2个CSV文件中获取输入,然后在对其内容进行连接操作之后,我需要将输出(输出JavaRDD)保存在my ...
- mysql外键约束的作用_如何在MySQL中设置外键约束以及外键的作用
1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表student,并添加各种约 ...
- mysql中datetime有带时区_如何在MySQL中存储datetime与时区信息
我有成千上万的照片在坦桑尼亚拍摄,我想存储的日期和时间每张照片是在MySQL数据库.然而,服务器位于美国,当我尝试存储一个坦桑尼亚日期时间在Spring夏令时(在美国)的"无效"小 ...
- MySQL数据库中如何查询分组后每组中的最后一条记录
MySQL数据库中如何查询分组后每组中的最后一条记录 方法一 select * from messages where id in (select max(id)fom messages group ...
- 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...
MySQL 查询当天.本周,本月.上一个月的数据 mysql查询当天的所有信息: SELECT * FROM 表名 WHERE year(时间字段名)=year(now()) and month(时间 ...
- mysql 跨实例复制数据_社区投稿 | MySQL 跨实例 copy 大表解决方案
作者简介 任坤,现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL.mongoDB 和 Redis 维护工作. 一.背景 某天晚上 20:00 左右开发人员找到我, ...
最新文章
- 语句覆盖(Statement coverage)
- mysql服务实例配置_MySQL多实例配置(一)
- java变量访问权限_JAVA成员变量的访问权限
- boost::errinfo_errno的用法测试程序
- 2018-03-26
- 书评:JBoss AS 7:配置,部署和管理
- 如何让tomcat服务器运行在80端口,并且无需输入项目名即可访问项目()
- ZooKeeper管理员指南
- 45岁,从中医转行云计算,年薪近百万...
- 清北学堂2019.5.3
- SCOM 2016 配置报警邮件 (下)
- git 远程代码回滚master
- (继续搬)struts日期格式的转换以及hibernate中session的关闭在xml中的配置
- Java程序练习-长整数加法运算
- Educational Codeforces Round 45 (Rated for Div. 2) G - GCD Counting
- 【高等数学】多元函数f(x,y...)的泰勒(Taylor)展开式
- 2020公务员考试应届毕业生的身份界定
- ibm刀片服务器系统瘫痪,ibm刀片服务器系统安装资料
- 理论算法两手抓,UIUC助理教授孙若愚60页长文综述深度学习优化
- NAS存储文件权限的设置方法
热门文章
- UnixLinux技术文章目录(2015-12-22更新)
- 计算机辅助制造期末试题答案,精编国家开放大学电大本科《机械CAD-CAM》2025期末试题及答案(试卷号:1119)...
- Jqgried树形列表
- RedisTemplate在项目中的应用
- Java反射机制概念及应用场景
- Android 人脸识别进行实名验证demo
- android 日期选择器
- 支付宝后台如何查看自己的签约详情
- 鲲鹏920 centos7 postgresql12 postgis2.5.4编译
- ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作