我有大約1000個需要解析的CSV文件。每個包含大約1000行,總計100萬條記錄。數據需要轉換,然後保存到數據庫,這就是爲什麼我必須通過我的應用程序來做到這一點。解析大量文件的流星/節點.js變得非常慢
我的問題是解析器在循環遍歷文件時逐漸變慢,直到完成運行需要永久。
以下是目前設置的方式。
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) { //run the parser })
,時間甚至是5次,並沒有什麼區別:它從每秒500次的速度逐漸減慢到每秒1次或2次。
有沒有人有想法,我可以如何防止這種放緩?部分原因可能是在transformAndSave
完成之前完成,可能會產生積壓。但是在這一點上,我沒有想法,並希望任何人都可以提供幫助。
非常感謝您提前!
丹尼爾
記爲流星的人。我將這個函數作爲Meteor方法來調用。不知道這是否有所作爲,但如果它確實如此,現在你知道了。
更新 這裏的是日誌輸出展示在內存使用和處理時間的穩步上升。
最後我認爲這是一個流星特定的內存泄漏,所以我將@Mike P標記爲給出正確的答案。謝謝,邁克! –