快速生成千万条mysql数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyongqing/article/details/82450519

目的

学习、测试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,性能比不上导入。但是它更接近实际场景

  • 存储过程
    速度很快,但是不如用熟悉的脚本方便

此生必看的科学实验-水知道答案
http://v.youku.com/v_show/id_XMjgzMzcwNDk4OA
《了凡四训》详解之改过之法
https://v.youku.com/v_show/id_XMzY5NTcxMDIwOA
印光大师十念法(胡小林主讲第1集)
http://v.youku.com/v_show/id_XMzUwMzc4NzY4NA

猜你喜欢

转载自blog.csdn.net/wyongqing/article/details/82450519