1

我想深入了解各种公司如何解决计数/增加“喜欢”/“视图”/“转推”或类似的东西的数量。

在每月超过 5000 万活跃用户的用户群中,我看到 Redis 和 Cassandra 都用于存储用户 ID 集以快速检索集基数(例如查看者计数)。这些解决方案有一些缺陷,但效果很好,可以并且正在被扩展。但是,我很好奇其他商店在这种情况下使用什么。

具体来说,做解决方案:

  • 使用集合,或其他数据结构,或者只是简单的键值?
  • 确切或近似计数,?
  • 仅在内存中,还是混合?
  • 开源解决方案,还是自产自销?
  • 有没有人构建了一个轻量级的仅集存储系统,并在其之上进行了 hyperloglog 估计?
4

1 回答 1

2

使用集合,或其他数据结构,或者只是简单的键值?

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

确切或近似计数,?

对于这个规模,精确的计数是没有用的,也没有意义。毕竟,当你有 5000 万用户时,知道你有 134 万唯一访问者对于一个具有 2% 误差率的项目就足够了。

仅在内存中,还是混合?

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

开源解决方案,还是自产自销?

不要重新发明轮子。使用久经考验且经过战场验证的工具

有没有人构建了一个轻量级的仅集存储系统,并在其之上进行了 hyperloglog 估计?

据我所知,Redis 提供 HyperLogLog 作为数据结构,因此您可以直接使用它。使用磁盘持久性将 hyperloglog 数据结构频繁检查点到磁盘,以避免在节点宕机时丢失它

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

但这意味着您需要自己执行 impl,并且可能会出现错误。

于 2016-04-08T19:35:23.780 回答