基于jdbc批量操作的大量测试数据制造方法

背景

使用传统的方式制造百万千万甚至亿级的测试数据花费时间过长。对于测试数据的要求也越多,姓名、身份证、银行卡等字段需要随机,流水号等字段要求不重复等。

设计

1、 使用MySql的Batch处理批量插入数据。

2、 将执行数据插入的程序和数据库部署到同一台服务器,降低网络通信延迟。

3、 使用java开发框架封装姓名、身份证、银行卡等随机字段的生成方法。

4、 使用多线程调用,进一步提升效率。

5、 总体的设计见下图。

实现

1、 初始化数据库连接的URL,重要参数:rewriteBatchedStatements=true

如果不加这个参数,jdbc会将批量插入一行一行的逐条处理,就没有达到我们所想要的批量插入的效率。示例代码片断如下:

当rewriteBatchedStatements=false,上面的代码片断会发送10次insert命令。

当rewriteBatchedStatements=true,只会发送一条insert命令。

数据库连接字符串拼接代码片断如下:

2、 SQL字符串准备(prepareStatement)

3、 需要随机值的字段赋随机值(姓名、身份证、手机、银行卡等)

4、 需要递增的、不可重复的字段赋递增的值(流水号、批次号等)

5、 执行addBatch()命令

ps.addBatch();

6、 每一千条SQL执行一次executeBatch()

效果

1、 优势:

a) 可针对任意MySql数据库的任意表进行插入,无需编写SQL。

b) 与传统造数据方式向比节约更多时间——

普通的方式插入1万行数据约需要44秒;

优化的方式插入1万行数据约需要0.6秒。

c) 封装了姓名、身份证等随机值生成方法,使得数据更真实。

2、 劣势:

a) 可写死的字段仍然需要一个默认值,当字段较多时手动赋值花费较多时间。

b) 目前仅支持MySql的数据库。

3、 改进:

a) 在初始化数据库连接之后可增加一个步骤:读取该表的现有数据,可写死的字段的值以现有数据作为默认值,可省去人工录入大量默认值的操作。

b) 持续集成——其他常见数据库支持(SQLServer、oracle等);更多随机字段生成方法(住址、工作单位、爱好等)。

作者:王珂

版权申明:本文为公众号原创,如需转载,请在公众号后台留言。

图片来源:网络

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181122A1ORU300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券