繁体   English   中英

为什么将数据加载到Meteor Collection需要这么长时间?

[英]Why does loading data into a Meteor Collection take so long?

我正在尝试使用Meteor构建一个数据可视化应用程序来可视化大型数据集。 数据当前存储在CSV格式的数据文件中,大约为64MB。

我正在使用node-csv插件将此数据文件加载到Meteor Collection(下面的代码)中。 但是每10k记录大约需要1分钟,按照这个速度大约需要1.5小时将整个文件加载到Collection中。 在此期间,Meteor服务器对Web请求没有响应。

这对我来说似乎异常缓慢。 这是正常的吗? Meteor是不是设计用于处理适度大量的数据? 或者,有没有比我发现的方式更好的方法来执行此数据导入过程?

var csv = Meteor.require('CSV');
var fs = Meteor.require('fs');
var path = Npm.require('path');

function loadData() {
  var basepath = path.resolve('.').split('.meteor')[0];
  console.log('Loading data into Meteor...');

  csv().from.stream(
    fs.createReadStream(basepath+'server/data/enron_data.csv'),
      {'escape': '\\'})
    .on('record', Meteor.bindEnvironment(function(row, index) {
      if ((index % 10000) == 0) {
        console.log('Processing:', index, row);
      }
      Emails.insert({
        'sender_id': row[0],
        'recipient_id': row[1],
        'recipient_type': row[2],
        'date': row[3],
        'timezone': row[4],
        'subject': row[5]
        })
      }, function(error) {
          console.log('Error in bindEnvironment:', error);
      }
    ))
    .on('error', function(err) {
      console.log('Error reading CSV:', err);
    })
    .on('end', function(count) {
      console.log(count, 'records read');
    });
}

即使您在流星环境之外执行此操作,一次加载一行数据也是非常低效的。 我认为你想要的工具是mongoimport

这可能不是很明显,但您不需要使用流星插入文档,以便将meteor与您的文档一起使用。

当您的集合中有0个文档时(或者在您的情况下有任何基本条件有意义),您可以尝试从Meteor.startup调用mongoimport。 我没有试过这个,所以我不能说这是多么痛苦,但我想你可以调用child_process.spawn来启动mongoimport。 如果由于某些原因不起作用,您可以随时将其放入脚本中并在执行meteor reset时运行该脚本。

附注 - 我认为静态服务器资产的适当位置是private目录。 这也允许您使用Assets api访问这些文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM