2017-04-14 39 views
0

節點版本:V7.4.0NodeRedis client.multi()hgetall性能

節點redis的版本:v.2.6.2

redis_version:2.8.4

的ubuntu 14.04 2GB RAM VPS實例

我得到的跡象表明,node_redis hgetall性能不是它應該是,但可能我做錯了什麼。我有一個有31669個元素的排序集。元素是散列鍵,每個散列有14個字段,大小約爲256字節。檢索散列需要64秒,這似乎太慢了。 下面是函數的樣子:

function getAllAnnotations() 
{ 
var currentSeconds = Math.floor((new Date()).getTime()/1000); 
console.log('currentSeconds before zrange: ' + currentSeconds); 

    client.zrangebyscore("geoHashSortedSet", "-inf", "+inf", function(err, reply) { 

     multi = client.multi(); 
     for (var uuid in reply) { 
      multi.hgetall(reply[uuid]); 

     } 
     multi.exec(function(err, replies) { 

      var currentSeconds = Math.floor((new Date()).getTime()/1000); 
      console.log('currentSeconds after multi returns: ' + currentSeconds); 
      allAnnotations = replies; 
     }); 

    }); 

} 

千萬人在這裏都認爲這是表現不佳,有什麼我做在上面的代碼,這是問題的一部分?

+0

您是否嘗試過['client.batch()'](https://github.com/NodeRedis/node_redis#clientbatchcommands)?你也不只是計時批次,而是'zrangebyscore'。 – robertklep

+0

我會嘗試client.batch()。是的,我意識到我正在計時zrangebyscore。大概我不應該包括它。謝謝。 – bhartsb

回答

2

您正在計時zrangebyscore以及您正在使用-inf+inf這意味着整個元素。爲什麼使用zrange而不是0-1。這可能會更快。

試試這個

function getAllAnnotations() 
{ 
    var start = Date.now(); 

    client.zrange("geoHashSortedSet", 0, -1, function(err, reply) { 
     console.log('zrange took ', Date.now() - start); 
     start = Date.now(); 

     multi = client.multi(); 
     reply.forEach(function(id) { 
      multi.hgetall(id); 
     }); 
     multi.exec(function(err, replies) { 

      console.log('multi took', Date.now() - start); 
      allAnnotations = replies; 
     }); 
    }); 
} 
+0

我想要整個元素,我也想到zrangebyscore的時間是相當微不足道的,所以這就是我原來包含它的原因。我將zrange與zrangebyscore進行了比較,他們在redis-cli的同一時間運行。謝謝,但是我從node-redis維護者那裏得到的答案。 – bhartsb

0

答案從NodeRedis維護者傳來:

你很可能會使用較舊的Redis的解析器版本,仍然有大嵌套數組的問題。實施有一個漏洞,一開始就被忽視。

只要您更新依賴關係,您的問題就會消失。作爲一個方面說明:通過使用批次而不是多次,如果您不需要進行交易,您的績效應該再次提高。

總的來說,您的電話不應該花費很長時間。

裁判:https://github.com/NodeRedis/node_redis/issues/1225

我使用Redis的解析器版本是v.2.0.3 - 6月17日,2016年更新到v.2.6.0 - 2017年4月3日固定的問題,因爲我的時間去從〜64秒降至〜2秒