最近项目中需要对服务程序进行大规模的模拟测试,于是专门写了一个测试程序,测试程序包含:测试数据的管理,功能测试,流程测试,压力测试。
对于要测试的程序的数据源来自数据库,所以,需要模拟一个大的数据量,从1W,10W,100W,1000W...。其实,一直以来没有怎么搞过大数据,写程序的时候,最多搞一两条记录测试一下功能,功能OK了就提交代码,进行下一步测试了。但是,进行实际的测试中,总是有这样或者那样的问题冒出来,归根到底是测试做的不够,特别是服务程序,稳定性的保障是排在第一位的,所以,一个服务程序进行大规模的数据测试是很有必要的。也是因为没有怎么处理过大数据,所以,当我尝试插入100W数据的时候,我使用的方式竟然是Append+Post,效率的低下可想而知,这种低效率的痛苦也迫使我设法换一个方案,或者增加一个接口,以便能够快速的完成模拟数据的插入。
其实之前搞过BCP,网上查了下,也有一种Bulk Insert的方式可以使用。
那先说一下BCP这种方式:BCP这种方式,其实是调用个SQL Server提供的一个工具,用户采用命令行的方式调用,是将一个格式化的字符串文本导入到数据库,效率比较高,而且,BCP的执行不一定要在SQL Server那一侧,执行环境没有装SQL Server也可以,只要将BCP相关的文件拷贝到执行目录就行,这个是相对于Bulk Insert相对比较方便的地方,但是,就我使用的经历来看,BCP也有一个风险:采用调用BCP进程的方式,有时候会出现启动进程失败的问题。
说说Bulk Insert。从查询资料到搞定用了4个小时,其实整个过程还是比较顺利的,说一说它的特点:
1 Bulk Insert是SQL Server提供的一个命令,可以使用SQL语句的方式使用。
2 也是将预定格式的文本批量导入到数据库中,如果数据文件不在SQL Server那一侧,需要使用UNC的文件路径,这个比较不爽,这个有时候会涉及到权限的问题,所以,暂时没有使用,但是,这个往往出现