最近学习StarRocks,需要验证从MySQL进行数据迁移的难易度、DataX在其中的运用以及两者的性能对比等。采用大量的数据模拟正式环境挑战MySQL的性能瓶颈才能使对比效果更清晰更有说服力。 创建数据时采用了 存储过程 和 先用Java生成sql文件再使用MySQL客户端工具导入 两种方式,这两种方式速度差异巨大。
drop table if exists person;
create table person
(
id integer primary key auto_increment comment '主键',
name varchar(20) default 'person' comment '姓名',
balance float(7,2) default 9.9 comment '零钱',
birthday datetime default current_timestamp comment '生日'
);
create procedure create_data()
begin
declare count integer;
set count = 0;
loop_flg:
loop
set count = count + 1;
if count > 10000000 then
leave loop_flg;
end if;
insert into person(`name`, `balance`) values (concat('张三', count), round(rand() * 100, 3));
end loop;
end;
速度奇慢无比,拜拜了您嘞!
public class Main {
public static void main(String[] args) {
writeData(10000000);
}
public static void writeData(int size) {
String sql = "INSERT INTO `person`(`name`, `balance`) VALUES ('%s', %.2f);";
String filePath = "E:\\test.sql";
File file = new File(filePath);
if (!file.exists()) {
try {
String msg = file.createNewFile() ? "成功创建sql文件" : "创建sql文件失败";
System.out.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
for (int i = 1; i <= size; i++) {
//写数据
bos.write(String.format(sql, "张三" + i, Math.random() * 100).getBytes());
if (i < size) {
bos.write("\n".getBytes());
}
}
//释放资源
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用navicat运行sql文件,仅需13分钟。
Q.E.D.