这可能更像是一个理论问题,但我正在寻找一个务实的答案。
我计划使用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
检索结果我想我的问题有两个。
答案 0 :(得分:5)
我对排序集中的数十万个密钥没有任何问题。当然,获得整个集合需要花费一些时间,但这是预期的 - 即使只是从I / O的角度来看。
一个这样的实例是在一个服务器上,其中有几个正在使用的数据库和几个有50k到> 150k密钥的有序集合。高写入是常态,因为它们通过实时网络服务器日志分析使用大量的锌线命令,每天超过150M记录。我会一次存储一周。
根据我的经验,我会说去看看;除非您的服务器硬件真的很低端,否则它可能会很好。
答案 1 :(得分:0)
在Redis中,排序集具有缩放限制。无法对已排序的集进行分区。因此,如果有序集的大小超过了分区的大小,则无法执行任何操作(无需修改Redis)。
引用文章:
分区粒度是关键,因此无法使用单个巨大的密钥对数据集进行分片,例如非常大的有序集[1]。
参考: