为什么将数据加载到流星集合中需要这么长时间
Why does loading data into a Meteor Collection take so long?
我正在尝试使用 Meteor 构建一个数据可视化应用程序来可视化一个大型数据集。数据当前存储在CSV格式的数据文件中,大小约为64MB。
我正在使用node-csv插件将此数据文件加载到Meteor集合中(下面的代码)。 但是每 10k 条记录大约需要 1 分钟,按照这个速度,将整个文件加载到集合中大约需要 1.5 小时。在此期间,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 一起插入即可将 meteor 与文档一起使用。
当您的集合中有 0 个文档时,您可以尝试从 Meteor.startup
调用 mongoimport(或者在您的情况下有意义的任何基本条件)。我还没有尝试过这个,所以我不能说这有多痛苦,但我想你可以打电话给child_process.spawn
开始mongoimport。如果由于某种原因不起作用,您可以随时将其放入脚本中,并在执行meteor reset
时运行该脚本。
旁注 - 我相信静态服务器资产的合适位置是private
目录。这还允许您使用资产 api 访问这些文件。
相关文章:
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 谷歌地图需要很长时间才能在ie11中渲染
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 为什么这个代码不起作用?我花了很长时间试图弄清楚这一点
- 如何在长时间执行JavaScript期间显示微调器
- 长时间轮询:每个浏览器中的通知
- 完整日历:如何支持一次点击和不长时间点击
- 如何使用 javascript 停止对 asp.net 进行正在进行的回发(长时间运行的执行)
- 为什么这个 AJAX 调用需要这么长时间
- 为什么这个正则表达式需要这么长时间才能执行
- 如何修复长时间运行的脚本
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- javascript秒表限制最长时间
- 长时间运行的脚本IE与Chrome/Firefox
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- 我的无引用 JavaScript 对象存在在哪里以及存在多长时间
- 为什么chromecast在动画帧之间需要这么长时间
- 输入焦点关闭键盘,需要长时间触摸
- 为什么将数据加载到流星集合中需要这么长时间