目的
学习、测试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是批量insert,性能比不上导入。但是它更接近实际场景
速度很快,但是不如用熟悉的脚本方便
此生必看的科学实验-水知道答案
《了凡四训》详解之改过之法
印光大师十念法(胡小林主讲第1集)