我正在解析一个2GB以上的xml文件,最初我处理(多线程)记录是一个接一个。
但是对数据库的单次插入sql查询太慢了(DB瓶颈),因此我需要在通过xml文档后创建一个大量的插入查询/ cvs文件。但是与Java不同,在nodejs中,我无法确定文档是否已完全解析。
工作12个小时以上,如果有人可以帮助我,那将是很棒的。也许尝试其他xml库?或只使用良好的旧Java。
var bigXml = require('big-xml');
reader = bigXml.createReader('dblp.xml', /^(article)$/, { gzip: false });
var count = 0;
var temp = [];
reader.on('record', async function (record) {
console.log("Processing article:" + count);
count++;
var pubBody = importPubBuilder(record);
temp.push(pubBody);
//taking temp Array to csv when finish reading file
});
reader.on('error', function (err) {
console.log(err);
});
function importPubBuilder(record) {
var body = {};
body.pubkey = record.attrs.key;
body.mdate = record.attrs.mdate;
body.title = null;
body.ee = null;
body.url = null;
if (record.children.find(obj => { return obj.tag == "title" }) != null) {
body.title = record.children.find(obj => { return obj.tag == "title" }).text;
}
if( record.children.find(obj => { return obj.tag == "ee" }) != null){
body.ee =record.children.find(obj => { return obj.tag == "ee" }).text
}
if( record.children.find(obj => { return obj.tag == "url" }) !=null){
body.url = record.children.find(obj => { return obj.tag == "url" }).text
}
return body
}