这可能更多是理论上的问题,但我正在寻找务实的答案。
我计划使用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检索结果
我想我的问题有两个方面。
Redis排序集是否可以扩展到5,000个成员而没有问题?10,000?50,000?
将ZRANGE和ZINTERSTORE(与ZRANGE结合使用)在应用于大型设备时是否会开始显示性能问题?
The Real Bil.. 5
我对排序集中的数十万个键没有任何问题。当然,要获取整个集合将需要更长的时间,但这是可以预期的-即使从I / O角度来看也是如此。
一个这样的实例是在一个服务器上,其中使用了多个数据库,并在其中排序了几个具有50k至> 150k密钥的集合。高写入率是一种规范,因为它们使用大量的zincrby命令,这些命令是通过实时Web服务器日志分析来达到的,每天的峰值记录超过1.5亿条。而且我一次要存储一个星期。
根据我的经验,我会说去看看。除非您的服务器硬件真的是低端的,否则可能会很好。
我对排序集中的数十万个键没有任何问题。当然,要获取整个集合将需要更长的时间,但这是可以预期的-即使从I / O角度来看也是如此。
一个这样的实例是在一个服务器上,其中使用了多个数据库,并在其中排序了几个具有50k至> 150k密钥的集合。高写入率是一种规范,因为它们使用大量的zincrby命令,这些命令是通过实时Web服务器日志分析来达到的,每天的峰值记录超过1.5亿条。而且我一次要存储一个星期。
根据我的经验,我会说去看看。除非您的服务器硬件真的是低端的,否则可能会很好。