大数据量生成脚本及导入策略
来源:互联网 发布:2015年进出口贸易数据 编辑:程序博客网 时间:2024/05/18 12:35
大数据量生成脚本及导入策略
分类: 测试2013-09-17 17:00 218人阅读 评论(1) 收藏 举报
shell数据库informix大数据脚本
性能测试过程中,如果需要构造一张表大数据量基础数据时,有两点需要注意:如何生成unl文件(此文件是后缀为.unl的数据文件,格式为,按表列分割的数据记录,例如:10001|33333|),生成的unl文件是否可以一次性导入到数据库相应表中。
为了方便叙述,假设数据库存在表test(id integer,name integer,primary key(id,name))。若想为此表导入1000W条记录,手动insert不现实,一般数据库系统都会提供特定指令,实现数据的导入导出操作,我们可以预先构造好相应格式的unl文件,再调用数据库导入指令,实现数据的快速导入。以Informix数据库为例,数据导入操作的命令为:load from testdata.unl insert into test;现在,剩下的问题就是如何生成一千万行的unl文件了。
了解shell脚本的同学会很快想到使用awk实现,这里也如大家所想,使用awk实现:
这样,会生成一个有1000W条记录的unl文件,于是我们兴冲冲使用“load from testdata.unl insert into test;”指令导入数据,结果发现报错了。因为一次性导入的数据太多,数据库系统的缓存、日志系统空间不够用,无法一次性记录太多的记录(或者因为操作时间太长,直接超时了“Long transaction aborted”)。
有两种解决方案:提高缓存、日志系统大小;缩小单个unl数据量。显而易见,后者更为合理。
如果将一千万的unl分成100小份,每份10W条,就好处理多了。脚本略作修改,如下:
此时,面对100个文件,要操作一百次,又有点头大。本着偷懒的原则,自然想到使用自动去做。于是,自动导入到test表中的shell脚本也新鲜出炉:
为了方便叙述,假设数据库存在表test(id integer,name integer,primary key(id,name))。若想为此表导入1000W条记录,手动insert不现实,一般数据库系统都会提供特定指令,实现数据的导入导出操作,我们可以预先构造好相应格式的unl文件,再调用数据库导入指令,实现数据的快速导入。以Informix数据库为例,数据导入操作的命令为:load from testdata.unl insert into test;现在,剩下的问题就是如何生成一千万行的unl文件了。
了解shell脚本的同学会很快想到使用awk实现,这里也如大家所想,使用awk实现:
- <span style="">#!/bin/sh
- awk 'BEGIN{
- dbfile=sprintf("testdata.unl");
- for(i=0; i<1000; i++)
- {
- for(j=0;j<10000;j++)
- {
- printf "100%05d|9%08d|\n",i,j >>dbfile
- }
- printf "%d completed.\n",i
- }
- }' /dev/null</span>
这样,会生成一个有1000W条记录的unl文件,于是我们兴冲冲使用“load from testdata.unl insert into test;”指令导入数据,结果发现报错了。因为一次性导入的数据太多,数据库系统的缓存、日志系统空间不够用,无法一次性记录太多的记录(或者因为操作时间太长,直接超时了“Long transaction aborted”)。
有两种解决方案:提高缓存、日志系统大小;缩小单个unl数据量。显而易见,后者更为合理。
如果将一千万的unl分成100小份,每份10W条,就好处理多了。脚本略作修改,如下:
- <span style="">#!/bin/sh
- awk 'BEGIN{
- for(i=0; i<100; i++)
- {
- dbfile=sprintf("mytable%02d.unl",i);
- for(j=0;j<100000;j++)
- {
- printf "100%05d|9%08d|\n",i,j >>dbfile
- }
- printf "%d completed.\n",i
- }
- }' /dev/null</span>
此时,面对100个文件,要操作一百次,又有点头大。本着偷懒的原则,自然想到使用自动去做。于是,自动导入到test表中的shell脚本也新鲜出炉:
- <span style="">#!/bin/sh
- #生成100条的sql脚本
- awk 'BEGIN{
- dbfile=sprintf("loadData.sql");
- for(i=0; i<100; i++)
- {
- printf "load from mytable%02d.unl insert into test;",i >>dbfile
- }
- printf "completed."
- }' /dev/null
- #执行脚本
- dbaccess mydatabank loadData.sql
- </span>
当然,如果想更深一步“偷懒”,可以把这些shell放一起,不过要注意可读性,建议再新建一个shell,顺序调用这两个shell,便于后续维护。
- 大数据量生成脚本及导入策略
- 大数据量生成脚本及导入策略
- 大数据量的导入
- 大数据量excel2007导入
- Excel导入大数据量
- DataFactory生成大数据量
- 大数据量数据删除策略
- mysql 导入脚本,如果数据量大,可以用phpstudy 里的数据库导入导出工具
- mysql-大数据量的导入
- oracle大数据量导入(sqlloader)
- poi大数据量excel导入
- Mysql 大数据量导入程序
- sql 大数据量导入(csv)
- sqlldr 导入大数据量数据
- poi大数据量生成excel
- 基于大数据量的视频推荐策略
- oracle大数据量的导入和导出
- 大数据量mysql文件导入程序
- cannot be hot swapped into a running virtal machine的解决方法
- 10. 翻转句子中单词的顺序。
- POJ 3007 Organize Your Train part II
- 实模式和保护模式
- 123我们456
- 大数据量生成脚本及导入策略
- awk脚本学习小结
- 阿里2014届校园招聘面经
- 阴影锥(Shadow Volume)
- 关于WCF,DataService中,查找模型对象时,主键含有数值时找不到对象问题处理
- 第3天 进入32位模式并导入C语言
- 2013年9月第1次面试&算法讲座(主讲人:July & 曹鹏博士)
- 用位运算实现两整数相加
- Java中的多线程及其实现