2011-08-04 41 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