Redis的排序集会缩放吗?

时间:2011-08-04 21:04:28

标签: scalability redis big-o

这可能更像是一个理论问题,但我正在寻找一个务实的答案。

我计划使用Redis's Sorted Sets根据计算值在我的数据库中存储模型的排名。目前我的数据集很小(集合中有250个成员)。我想知道排序的集合是否会扩展为5000个或更多成员。 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一起)在应用于大型设备时是否会开始显示性能问题?

2 个答案:

答案 0 :(得分:5)

我对排序集中的数十万个密钥没有任何问题。当然,获得整个集合需要花费一些时间,但这是预期的 - 即使只是从I / O的角度来看。

一个这样的实例是在一个服务器上,其中有几个正在使用的数据库和几个有50k到> 150k密钥的有序集合。高写入是常态,因为它们通过实时网络服务器日志分析使用大量的锌线命令,每天超过150M记录。我会一次存储一周。

根据我的经验,我会说去看看;除非您的服务器硬件真的很低端,否则它可能会很好。

答案 1 :(得分:0)

在Redis中,排序集具有缩放限制。无法对已排序的集进行分区。因此,如果有序集的大小超过了分区的大小,则无法执行任何操作(无需修改Redis)。

引用文章:

  

分区粒度是关键,因此无法使用单个巨大的密钥对数据集进行分片,例如非常大的有序集[1]。

参考:

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