在node中获取到一个对象数组,可能包含几万个对象,以下是将数据写到文件,再使用load data in file方式进行处理的效率测试,
但是在进行20w数据测试时,文件大小才15M,文件的写操作用了779933ms,求优化方式
1.[代码][JavaScript]代码
var mysqlpool=require('../modules/mysqlpool')();
var SimpleQuene=require('../modules/SimpleQuene');
var hash=require('../modules/hash');
var moment=require('moment');
var fs=require('fs');
var tempfilepath='E:/1.txt';
var limit=200000;
var queue=new SimpleQuene(limit);
var nowTime=moment().format('YYYY-MM-DD h:mm:ss');
console.time('init data');
for (var i =0;i
url='http://www.baidu.com'+i;
urlhash=hash.fnv1a(url);
queue.in({
url:url,
hash:urlhash,
title:'标题是什么'+i,
time:nowTime
});
}
console.timeEnd('init data');
writeDate();
function writeDate(){
console.time('fs');
var writer=fs.createWriteStream(tempfilepath);
while(!queue.isEmpty()){
var temp=queue.out();
writer.write(temp.url+','+temp.hash+','+(temp.title || '""')+','+(temp.time || '""')+"\n");
};
writer.end(function(){
console.timeEnd('fs');
save();
});
}
function save(){
console.time('sql');
var sql="load data infile '"+tempfilepath+"' replace into table spider_page FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (url,urlhash,title,time)" ;
mysqlpool.query(sql,function(err,result){
console.timeEnd('sql');
console.log(result.affectedRows+' rows have been insert');
});
}
2.[图片] 10000.png
3.[图片] 50000.png
4.[图片] 100000.png
5.[图片] 200000.png
6.[图片] file.png