本文主要会讲解生成过程中遇到的以下问题
- 生成数据过程中导致 java.lang.StackOverflowError
- 生成一亿条数据从十分钟到二十秒的改进
今天接到一个数据组同事的求助,需要至少一亿条数据来测试数据库性能问题。格式只要字段间有空格隔开即可,对文本格式没有要求。
简单思考了一下,Java生成这一亿条数据所准备的工作:
- 设计数据文本格式:clazz + 空格 + name + 空格 + value
- 写数据尽可能减少IO操作,减少不比较的开销,所以选择按阶段flush进文本。
- 抽离数据组装方法,初步考虑使用递归来实现。
说干就干,想好了就开始动手操作。
static String newLine = "\r\n";// windows下换行符号
static StringBuffer sbrNew = new StringBuffer(1000000);// 创建sbrNew
static int count = 1;
public static void main(String[] args) throws Exception{
long startTime = System.currentTimeMillis();
System.err.println("开始时间:" + startTime);
// 1. 创建文本所在目录,建议提前建好 D:\\test_data
File file = new File("D:\\test_data\\data_new.txt");
// 2. 获取该文件的缓冲输出流
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file))