Redis的有序集合能够扩展吗?

5

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

我计划使用Redis的有序集合来存储基于计算值的模型在我的数据库中的排名。目前我的数据集很小(集合中有250个成员)。我想知道有序集合是否能扩展到5,000个或更大的成员。Redis声称最大值为1GB,而我的值是模型的ID,因此我并不担心有序集合值的可扩展性。

ZRANGE 的时间复杂度为O(log(N)+M)。如果我经常尝试从集合中获取前5个排名最高的项目,则N个集合项中的log(N)可能是一个问题。

我还计划使用ZINTERSTORE,其时间复杂度为O(N*K)+O(M*log(M))。我计划经常使用ZINTERSTORE,并使用ZRANGE 0 -1检索结果。

我想问的问题有两个。

  1. Redis有序集合能够扩展到5,000个成员吗?10,000个?50,000个?
  2. 当应用于大型集合时,ZRANGE和ZINTERSTORE(与ZRANGE结合使用)是否会出现性能问题?
2个回答

6

我在处理数十万个有序集合键时没有遇到任何问题。当然,获取整个集合需要一定的时间,集合越大,所需时间也越长,但这是可以预期的——即使从I/O角度来看也是如此。

其中一个例子是在一个使用多个DB的服务器上,有几个有序集合,其中每个集合中有50k到150k个键。高写入是常态,因为它们使用了许多zincrby命令,这些命令通过实时Web服务器日志分析产生,每天高达150M条记录。而我会将一周的记录存储下来。

根据我的经验,我认为你可以放心去尝试;除非你的服务器硬件真的非常低端,否则一切都很顺利。


1
在Redis中,排序集合存在着扩展限制。排序集合无法分区。因此,如果排序集合的大小超过了分区的大小,除非修改Redis,否则无法解决问题。
引用文章中的内容:
“分区粒度是关键,因此不可能对具有单个巨大键(例如非常大的排序集)的数据集进行分片。”
参考资料:
[1] http://redis.io/topics/partitioning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接