我想深入了解各种公司如何解决计算/增加“喜欢”/“观看”/“转推”或类似规模的数量的问题。
在超过 5000 万月活跃用户的用户群中,我看到 Redis 和 Cassandra 都用于存储用户 ID 集以快速检索设置的基数(例如,观众人数)。这些解决方案有一些缺点,但效果很好,可以而且正在被扩展。不过,我很好奇其他商店在这种情况下使用什么。
具体解决办法:
- 使用集合或其他数据结构,还是只是简单的键值对?
- 准确或近似计数,?
- 仅在内存中还是混合?
- 开源解决方案,还是自行开发?
- 是否有人构建了一个轻量级的仅集合存储系统,并在其之上进行了 hyperloglog 估计?
最佳答案
Use sets, or other data structures, or just plain key-value?
HyperLogLog 是一种强大的算法,可以为您提供具有微小存储空间的唯一用户/ View 的数量,提供一些近似值。
Exact or approximate counts,?
对于这个比例,精确计数是无用的,没有意义。毕竟,当您拥有 5000 万用户时,知道您有 134 万独立访问者访问一个具有 2% 误差率的项目就足够了。
In-memory only, or hybrid?
这取决于您对延迟的要求。在内存中授予非常快速的访问权限,但存在数据丢失的风险。您可以在具有持久存储支持的内存中使用
Open source solution, or home grown?
不要重新发明轮子。使用经过充分验证和战场验证的工具
Has anybody built a lightweight set-only storage system with hyperloglog estimation on top of it?
据我所知,Redis 提供了 HyperLogLog 作为数据结构,因此您可以直接使用它。使用磁盘持久化将 hyperloglog 数据结构频繁检查点到磁盘,以避免在节点宕机时丢失它
否则,您也可以在 Cassandra 中实现 HyperLogLog 算法,因为 Cassandra 使用 max(timestamp)
作为解析规则,因此只需欺骗数据库并将 HyperLogLog 存储桶值存储为时间戳。
但这意味着您需要自己执行 impl,可能会出现错误。
关于cassandra - 如何存储唯一的 "Likes"或 "Views"或按比例设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507717/