如何存储独特的"喜欢"或"观点"或规模大小?

时间:2016-04-08 19:23:58

标签: cassandra redis set hyperloglog

我想深入了解各公司如何解决计算/增加"喜欢" /"观看" /"转推"或类似的规模。

在用户基数超过5000万月活跃用户的情况下,我看到Redis和Cassandra用于存储多组userIds以快速检索设置基数(例如,查看者数量)。这些解决方案有一些瑕疵,但效果很好,可以并且正在扩大规模。但是,我很好奇其他商店在这种情况下使用的是什么。

具体来说,做解决方案:

  • 使用集合或其他数据结构,还是只使用普通键值?
  • 确切或近似计数,?
  • 仅限内存,还是混合?
  • 开源解决方案,还是本土化?
  • 是否有人建立了一个轻量级的仅限存储系统,并在其上面进行了超级博客评估?

1 个答案:

答案 0 :(得分:2)

  

使用集合或其他数据结构,还是只使用普通键值?

HyperLogLog是一种功能强大的算法,可以为您提供具有微小空间存储空间的独特用户/视图的数量,并提供一些近似值。

  

确切或近似计数,?

对于这个比例,确切的计数是无用的,没有意义。毕竟当你拥有5千万用户时,你知道你拥有1.34百万的独立访问者,对于一个误差率为2%的项目来说已经足够了。

  

仅限内存,还是混合?

这取决于您在延迟方面的要求。在内存中授予非常快速的访问权限但存在数据丢失的风险。您可以在内存中使用持久存储支持

  

开源解决方案,还是本土化?

不要重新发明轮子。使用经过充分验证和战场验证的工具

  

是否有人建立了一个轻量级的仅限套装存储系统,并在其上面进行了超级博客评估?

据我所知,Redis提供HyperLogLog作为数据结构,因此您可以使用它。使用磁盘持久性来经常检查超级日志数据结构到磁盘,以避免在节点出现故障时丢失它

否则,您还可以在Cassandra中实现HyperLogLog算法,利用Cassandra使用max(timestamp)作为解析规则的事实,这样只需欺骗数据库并将HyperLogLog存储桶值存储为时间戳。

但这意味着您需要自己动手,并有可能出现错误。