背景
在开发过程中,我们会做性能测试,但有些性能测试只有数据量达到一定程度的才能更好的测试出来。为此我们需要特意研究如何快速的生成千万级乃至亿级别的数据。
数据生成思路
- 利用python生成千万级的txt文本数据
- 将txt文本数据通过mysql的
load data infile
语句导入到数据库中,这中方式非常高效,快到一千万的数据两分钟搞定,当然这取决于你每行的数据量。 - 接下来就可以享受海量数据的体验啦。
生成千万级txt文本
在别的教程中,有用存储过程、临时内存表的方式,实现快速生成数据。我个人认为有以下不足
- 生成数据真实性不高
- 生成数据关联灵活性不高
如果利用python脚本,我们可以非常灵活的通过脚本代码来实现生成数据之间的关系与分布,而且我们可以利用pyton的一个开源的faker
库,来生成各种看着不那么假的名字、地址、手机号、邮件等。git地址:faker
目标
我们模拟一个微博动态的一个过程,其中包含用户表,用户关注表,以及微博动态表。我们需要分析在一个用户有上百万的粉丝,微博动态的查询优化。
生成五百万用户数据
本来想用faker模拟真实数据,但是生成性能太低了,节约时间就暂时随意一点,空了会写个基于numpy的高性能随机
创建用户表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NULL,
`email` varchar(255) NULL,
`phone` varchar(20) NULL,
PRIMARY KEY (`id`)
);
python脚本生成(耗时66s)
import os
from datetime import datetime
def build_data(file_path, data_count):
if os.path.exists(file_path):
os.remove(file_path)
file = open(file