快速生成千万条mysql数据
目的
学习、测试mysql大数据场景,需要先生成大量数据。
思路
mysql官方文档说得很清楚。"load data infile"导入数据比insert要快20倍。所以我们先生成一千万条数据的文件。
然后将数据导入表中。
## 生成数据
假如有个用户表(id, username,password, age, sex),id是自动增长,我们现在需要生成username等信息
生成一千万条数据,速度还能接受,耗时236秒,文件大小315M。
import string import random def random_str(length=1): template = string.letters + string.digits chars = random.sample(template, length) return "".join(chars) def generate_record(): """ username/password/age/sex """ length = random.randint(6, 20) username = random_str(length) length = random.randint(6, 20) password = random_str(length) age = random.randint(10, 100) sex = random.choice([0, 1]) return [username, password, age, sex] def create_file(num=10000000): with open("user_data.txt", "w") as f: for i in range(num): row = generate_record() f.write(",".join(map(str, row))+"\n") if __name__ == '__main__': import datetime start = datetime.datetime.now() create_file() end = datetime.datetime.now() cost = (end -start).total_seconds() print("cost: %s" % cost) #一千万条,耗时236s,文件315M
导入
load data infile命令有安全限制,最好是把数据拿到mysql server端,再通过mysql -uxxx -pxxx进入命令,再导入。
我的虚拟机导入耗时57秒
load data infile "/user_data.txt" into table user fields terminated by ',' lines terminated by '\n' (username, password, age, sex);
其它方式
- 测试工具sysbench
sysbench是批量insert,性能比不上导入。但是它更接近实际场景
- 存储过程
速度很快,但是不如用熟悉的脚本方便
此生必看的科学实验-水知道答案
《了凡四训》详解之改过之法
印光大师十念法(胡小林主讲第1集)