Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析Node.js中的巨大文件速度更快,逐行读取文件,当前运行速度太慢_Javascript_Node.js - Fatal编程技术网

Javascript 解析Node.js中的巨大文件速度更快,逐行读取文件,当前运行速度太慢

Javascript 解析Node.js中的巨大文件速度更快,逐行读取文件,当前运行速度太慢,javascript,node.js,Javascript,Node.js,我有一个非常大的文本文件,有超过1500万条记录。它是一个词汇表文件,在左边显示单词,在右边显示单词的出现。我寻找的最终结果是过滤掉所有这些单词,任何出现次数少于200次的单词都被归类为困难单词 例如,这是文本文件的内部内容: of 12765289150 and 12522922536 左侧的单词和右侧的引用由制表符分隔 目前,我所在的系统返回出现的单词{ 常量fs=require('fs'), es=需要(‘事件流’), 路径=要求(“路径”), filePath=path.join(u

我有一个非常大的文本文件,有超过1500万条记录。它是一个词汇表文件,在左边显示单词,在右边显示单词的出现。我寻找的最终结果是过滤掉所有这些单词,任何出现次数少于200次的单词都被归类为困难单词

例如,这是文本文件的内部内容:

of  12765289150
and 12522922536
左侧的单词和右侧的引用由制表符分隔

目前,我所在的系统返回出现的单词
{
常量fs=require('fs'),
es=需要(‘事件流’),
路径=要求(“路径”),
filePath=path.join(uu dirname,“../documents/vocab_cs”);
const-frequentwords=[];
设s=fs.createReadStream(文件路径)
.pipe(es.split())
.pipe(es.mapSync((行)=>{
常量行=行分割('\t');
常数频率=数量(行[1]);
如果(频率){
log('读取文件时出错',err);
})
.on('end',()=>{
unfrequentwordsstring=unfrequentwords.join(“”);
res.status(200).json(罕见的两个rdsstring);
console.log('读取整个文件')
})
);
}
任何建议都将不胜感激,因为我在这个领域没有太多的经验,我完全被困在这个问题上


只需要整个过程运行得更快,并返回给我这些罕见的单词
它必须是一个文本文件吗?文件更新了吗?如果是的话,多久更新一次?不,文件没有更新。只要扫描这些值,它可以是任何东西。@creynders如果它没有更新,我只需将相关值存储到一个单独的文本文件中即可使用它。或者更好的是,将它们存储在JS数组中。优化很难,99.99%的时候你需要使用几种技术。这都是非常上下文和用例特定的。无论如何,我要尝试的第一件事是内存中的数据存储,并运行基准测试,测试它的速度有多快以及是否值得。例如,redis:For I根据使用情况,它可能涉及所有这些组合:平面文件结构、数据库、内存缓存层、故障快速的bloom筛选器实现和用于进一步查找的levenshtein算法实现。但通常它还涉及各种UI技巧,以给人以速度的印象(这比实际速度更重要)。例如,屏幕锁定1秒似乎比请求加载-响应可视化1.5秒要长
exports.readText = (req, res, next) => {
  const fs = require('fs'),
    es = require('event-stream'),
    path = require("path"),
    filePath = path.join(__dirname, "../documents/vocab_cs");

  const infrequentWords = [];

  let s = fs.createReadStream(filePath)
    .pipe(es.split())
    .pipe(es.mapSync((line) => {
        const lines = line.split('\t');
        const freq = Number(lines[1]);
        if (freq <= 200) {
          infrequentWords.push(lines[0]);
        }
        // pause the readstream
        s.pause();

        // process line here and call s.resume() when rdy

        // resume the readstream, possibly from a callback
        s.resume();
      })
      .on('error', (err) => {
        console.log('Error while reading file.', err);
      })
      .on('end', () => {
        infrequentWordsString = infrequentWords.join(' ');
        res.status(200).json(infrequentWordsString);
        console.log('Read entire file.')
      })
    );
}