Я анализирую файл размером 2 ГБ + xml, первоначально я обрабатываю (многопоточные) записи одну за другой.
Но одиночный SQL-запрос на вставку в БД слишком медленный (горлышко бутылки БД), поэтому мне нужносоздайте файл массовой вставки запроса / cvs после просмотра XML-документа.Но в отличие от 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
}