簡體   English   中英

node.js處理大量數據

[英]node.js process a big collection of data

我在節點上使用貓鼬。 我正在請求從遠程數據庫檢索項目集合。 為了獲得完整的報告,我需要分析一個大集合的整個集合。

我避免接近以下內容:

model.find({}, function(err, data) {
  // process the bunch of data
})

現在,我使用遞歸方法來輸入局部變量。 稍后,我將有關該過程的信息作為響應發送回去。

app.get('/process/it/',(req,res)=>{

  var processed_data=[];

  function resolve(procdata) {
    res.json({status:"ok", items:procdata.length});
  }

  function handler(data, procdata, start, n) { 
    if(data.length <= n)    
      resolve(procdata);
    else {
      // do something with data: push into processed_data
      procdata.push(whatever);

      mongoose.model('model').find({}, function(err, data){     
        handler(data, procdata, start+n, n);    
      }).skip(start).limit(n);
    }
  }

  n=0
  mysize=100

  // first call
  mongoose.model('model').find({}, function(err, data){ 
    handler(data, processed_data, n, mysize);

  }).skip(n).limit(mysize);

})

是否有任何方法或解決方案提供了性能優勢,或者僅僅是以更好的方式實現了這一優勢?

任何幫助,將不勝感激。

解決方案取決於用例。

如果曾經處理過的數據不經常更改,那么您可能擁有一個包含已處理數據的輔助數據庫。

您可以按照現在的方式使用分頁從主數據庫加載未處理的數據。 並且所有處理的數據都可以在單個查詢中從輔助數據庫加載。

只要您的數據集不夠大就可以,但是性能可能會很低。 當達到千兆字節級別時,您的應用程序將簡單地中斷,因為計算機在將數據發送到客戶端之前沒有足夠的內存來存儲您的數據。 發送千兆字節的報告數據也將花費大量時間。 這里有一些建議:

  • 嘗試通過Mongo聚合框架聚合數據,而不是通過應用程序代碼進行聚合
  • 嘗試將報告數據分成較小的報告
  • 預生成報告數據,將其存儲在某個地方(也許是另一個集合),並在需要查看時將其發送給客戶端

暫無
暫無

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

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