2017-09-15 158 views
0

我有多個customerKey值分配給一個數值的表;我寫了一個腳本,其中每行數據掃描整個表以查找分配給當前customerKey的所有值並返回最高值;性能服務器腳本

我有一個性能問題 - 腳本進程每秒大約10條記錄 - 任何想法如何改進或者可能提出一個替代解決方案plesae?

function getLastest() { 
    var date = app.models.magicMain.newQuery(); 
    var date_all = date.run(); 

    date_all.forEach(function(e) { // for every row of date_all 
     var temp = date_all.filter(function(x) { 
      return x.SubscriberKey === e.SubscriberKey; // find matching records for the current x.SubscriberKey 
     }); 
     var dates = []; 
     temp.forEach(function(z) { // get all matching "dates" 
      dates.push(z.Date); 
     }); 
     var finalValue = dates.reduce(function(a, b) { // get highest dates value (integer) 
      return Math.max(a, b); 
     }); 

     var record = app.models.TempOperatoins.newRecord(); // save results to DB 
     record.email = e.SubscriberKey.toString() + " " + finalValue.toString(); 
     app.saveRecords([record]); 
    }); 
} 

回答

1

我將是唯一的建議補充:

變種recordstosave = [];

在你的函數的頂部。 然後用recordstosave.push(記錄)替換app.saveRecords([record])。

最後在你的foreach函數之外做app.saveRecords(recordstosave)。

我看到了主要的處理時間改進,而不是單獨在循環內保存每條記錄。