2011-08-04 77 views
1

這可能更多是一個理論問題,但我正在尋找一個實用的答案。威爾Redis的排序集規模?

我打算使用Redis's Sorted Sets根據計算值在我的數據庫中存儲模型的排名。目前我的數據集很小(集合中有250名成員)。我想知道排序後的集合是否可以擴展爲5,000個成員或更大。 Redis聲稱最大值爲1GB,我的值是我的模型的ID,所以我並不真正關心排序集的值的可伸縮性。

ZRANGE具有O(log(N)+ M)的時間複雜度。如果我經常嘗試從集合中獲得排名前5的項目,那麼N個集合項目的記錄(N)可能是一個問題。我也計劃使用具有O(N * K)+ O(M * log(M))的時間複雜度的ZINTERSTORE。我打算頻繁使用ZINTERSTORE並使用ZRANGE檢索結果0 -1

我想我的問題是雙重的。

  1. 將Redis排序集規模5000個成員沒有問題?萬? 50000?
  2. ZRANGE和ZINTERSTORE(與ZRANGE一起使用)在應用於大型設備時會出現性能問題嗎?

回答

4

我對有序集合中的數十萬個密鑰沒有任何問題。確定獲得整個集合需要一段時間,但是這是預期的 - 即使從I/O立場來看也是如此。

一個這樣的實例是在一臺服務器上使用了幾個DB,並在其中使用了幾個有50k到> 150k密鑰的有序集。高寫入是常態,因爲它們使用大量的鋅指令,通過實時Web服務器日誌分析,每天超過1.5億條記錄。我會一次存儲一週。

根據我的經驗,我會說,去看看;它可能會很好,除非你的服務器硬件真的很低端。

0

在Redis中,排序集具有縮放限制。排序後的集合不能分區。因此,如果有序集的大小超過了分區的大小,則無法執行任何操作(無需修改Redis)。從文章

報價:

的分割粒度是關鍵,所以它是不可能的分片數據集與像一個非常大的有序集合一個碩大的按鍵[1]。

參考:

[1] http://redis.io/topics/partitioning