我们有一个拥有众多用户的网站。为了管理在特定日期进行交易的用户,我们使用Redis并存储二进制数列表作为值。例如,如果我们的系统有5个用户,并且用户2和5在1月2日进行了交易,那么我们1月2日的密钥将看起来像'01001'。这也有助于我们使用简单的位操作确定给定时间段内的唯一用户和新用户。但是,随着用户数量的增加,我们的内存不足以存储所有这些密钥。
是否有任何替代数据库可用于以类似方式存储数据?如果没有,我们应该如何存储数据以获得类似的性能?
答案 0 :(得分:0)
的Redis' nemory的使用会受到许多参数的影响,因此我也会尝试在INFO ALL中查找初学者。
如果每个用户都有一点代表,那么每天400K的访问者每个值至少应该占50KB,但由于位图索引中的稀疏性可能要大得多。我还怀疑,由于新用户更活跃,因此您的大部分位图都会出现问题。 "有源"标志朝向它的末端,使其达到接近其最大尺寸(即用户总数)。因此,您应该尝试回答的问题是如何有效地存储这些400K访问,而不会牺牲您正在使用的功能。这实际上取决于您对录制的访问所做的事情。
例如,如果您只对总计数感兴趣,则可以考虑使用HyperLogLog数据结构来计算具有低错误率和小内存/资源占用空间的交易用户。另一方面,如果您尝试跟踪单个用户,可能会将每位用户位图映射到自您注册网站以来的日期。
此外,您可以考虑在应用程序代码/ Lua脚本/黑客Redis中实现位图压缩技术。最好的答案取决于你当然要做的事情。