如何有效地处理Node.js中的大量数据
How to efficiently process a big list of data like that in Node.js?
我在一个文件中有一个相当大的数据列表,我需要在Node.js中处理这些数据。该列表是URL的列表,对每个URL所做的工作本质上是一个请求和对响应所做的一些工作。
由于完成这项工作的代码相当大,所以我只调用启动它的函数doWork()
。它接受数据和回调,所以它有点像
function doWork(data, callback)
现在,我目前的做法如下:我用以下方式编码了一个queueManager
模块:
var queueManager = {};
queueManager.queue = [];
queueManager.addForProcessing = function (data) {
this.queue.push(data);
};
queueManager.processing = false;
queueManager.startProcessing = function () {
if (!this.processing) {
this.process();
this.processing = true;
}
};
queueManager.process = function () {
var self = this;
if (this.queue.length > 0) {
doWork(this.queue.pop(), function () {
self.process();
});
} else {
this.processing = false;
}
};
module.exports = queueManager;
我把它和readline一起使用:
rl.on('line', function (data) {
queueManager.addForProcessing(data);
queueManager.startProcessing();
});
这是有效的,但似乎并不有效。它实际上是同步代码。一次处理每一行,当处理一行时,不会发生任何事情。问题是,有时,由于每一行都有一个请求,每一行的处理都需要一些时间,这会影响应用程序的效率。事实上,包含数据的文件有超过250K行,所以这很容易成为一个问题。
现在,我为什么要添加这个队列管理器?因为如果我只是:
rl.on('line', function (data) {
doWork(data, function () {
console.log(`${data} has been processed...`);
});
});
该应用程序就是不起作用。它开始大量处理相同的数据,但没有一个处理是正确的。
我的变通方法奏效了,但它会导致效率问题。
因此,在这种情况下,如果我有一个大的数据列表,并且我需要对这些数据进行处理,包括web请求和其他类似操作,我如何才能以比我所做的更有效的方式进行处理?
您应该了解集群和worker-https://nodejs.org/api/cluster.html
Node.js的一个实例在一个线程中运行。服用用户有时想要启动的多核系统的优势Node.js进程的集群来处理负载。
集群模块允许您轻松创建子进程所有共享服务器端口。
您基本上可以将应用程序拆分为两个流程,并将大数据流程发送到后台。然后,您可以使用消息显示主应用程序进程中的队列状态。
这里有一个很好的集群教程-https://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何使用 Angular JS 将数据保存在数据库中
- JS验证ajax返回的html中的表单数据
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 如何使用下划线js转换这些数据
- node.js请求数据事件未在CORS ajax调用中触发
- 通过连线将数据从js发送到控制器
- 在每次文件上传时发送带有放置区的自定义数据.js
- 节点.js 如何通过基本 Passport 在数据会话中维护所需的数据.js
- 如何从 c3 获取数据.js
- 存储来自多个回调节点的数据.js javascript
- 为什么我不能在 Angular JS 服务中更改数据.js执行函数后
- 在 vis 中访问节点数据.js单击处理程序
- 为什么使用 D3 显示数据.js看起来是截断的
- 检索车把中的专用阵列数据.js模板
- 如何使用挖空恢复模板中的数据.js
- 如何从节点中获取数据.js http get request
- 如何在角度图中实现这些数据.js
- 尝试复制 json 数据 js 时出现类型错误
- 如何在基于 Backbone 的模板中添加数据.js元素