gpt4 book ai didi

node.js - Meteor/Node.js 解析大量文件变得非常慢

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:36 25 4
gpt4 key购买 nike

我有大约 1000 个 CSV 文件需要解析。每个包含大约 1000 行,总共 100 万条记录。数据需要转换然后保存到数据库,这就是为什么我必须通过我的应用程序来执行此操作。

我的问题是解析器在循环遍历文件时逐渐变慢,直到永远无法完成运行。

以下是当前的设置方式。

var files = [ file1Path, file2Path.... file1000Path ];

function parseFile(index) {
var startTime = new Date().getTime();
var filePath = files[index];
var stream = fs.createReadStream(filePath);

//parse using fast-csv npm module
csv.fromStream(stream, { config })
.on('data', function (row) {
transformAndSave(row);
})
.on('end', function () {
console.log( new Date().getTime() - startTime + " elapsed " );
parseFile(index + 1)
});
}
parseFile(0);

我尝试了几种不同的方法,但每次基本上都是一样的。第一个文件在 2 秒内完成,到第 8 个文件时我们需要 5 或 6 秒,后来它会攀升到 24 秒,等等。我尝试过的其他事情包括做... files.forEach(function (file) {//运行解析器 }),一次执行 100 批,甚至一次 5 批,这没有什么区别:它的速度逐渐从每秒 500 次减慢到 1 次或每秒 2 个。

有人知道如何防止这种速度变慢吗?部分原因可能是 stream.on('end')transformAndSave 完成之前完成,可能会造成积压。但目前我已经没有主意了,希望任何人能够提供任何帮助。

提前感谢您!!

丹尼尔

<小时/>

给 Meteor 人的注意事项。我将此函数称为 Meteor 方法。不确定这是否有什么区别,但如果有的话,现在你知道了。

<小时/>

更新以下是日志输出,显示内存使用量和处理时间的稳步增长。

Log output

最佳答案

似乎是资源问题,因为内存不足。我会尝试一种不使用递归函数的方法,这可能允许更容易地释放资源。一种方法可能是使用 async .

var Logger = require('arsenic-logger');
var fs = require('fs');
var async = require('async');
var csv = require('fast-csv');
var path = require('path');

Logger.echoMemoryUsage();

var testDir = path.resolve(__dirname, 'test');

fs.readdir(testDir, (err, files) => {

Logger.debug(files);

if (err) {
Logger.error(err);
}

async.mapLimit(files, 2, function(file, cb) {

var startTime = new Date().getTime();
var stream = fs.createReadStream(testDir+'/'+file);

Logger.debug("Reading: " + file);

config = {};

//parse using fast-csv npm module
csv.fromStream(stream, config)
.on('data', function(row) {
//Logger.debug(row);
//transformAndSave(row);
})
.on('error', function(err) {
Logger.error(err);
cb(err);
})
.on('end', function() {
Logger.debug(new Date().getTime() - startTime + " elapsed ");
setTimeout(cb, 1000);
});

}, function(err, results) {
Logger.info("Finished!");
process.exit(1);
});

});

关于node.js - Meteor/Node.js 解析大量文件变得非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38595390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com