簡體   English   中英

如何高效地處理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請求和其他類似操作的數據,我該如何以比我更有效的方式進行處理?

您應該看看集群和工作者-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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM