我正在尝试为不同的客户计算每页的独特访问者或其他事件(如点击等)等。我打算做的是为GUID分配一个唯一的基于cookie的GUID,然后为每个事件调用SADD。 redis键将为SET_ [EVENTID]
如果我只想要用户数量,我可能会使用PFADD,但我的应用还需要知道谁是唯一用户
但问题是,如果有太多的EVENT或太多的用户,那么SADD将在内存中结束大量的用户ID 我们期望每小时在所有客户中发送1000k +用户事件,事件数量也将达到100+
我想要一个意见是redis正确的存储选择。由于请求数量太多,任何传统的RDBMS方法都不起作用
我不确定是否有任何其他存储可以帮助像Aerospike
答案 0 :(得分:5)
在RTB中,大量使用Aerospike,frequency capping是需求侧平台(DSP)的常见用例。根据用户查看特定广告或特定广告系列的广告的次数设置上限。同时,跟踪总展示次数以及剩余预算。这些计数器的TTL通常很短。
<强>解决方案强>
您可以使用复合键<page ID : user ID : yyyymmdd>
作为特定用户是否访问过该页面的标志,并使用24小时TTL。这将存在于内存中的数据集page-visit
namespace中。
如果没有这样的钥匙:
page-visit
中使用此键创建一个新记录,初始值为1. <page ID : yyyymmdd>
中的密钥page-users
。此集(page-users
)可以存在于stores其SSD上的数据的命名空间中。如果此密钥存在:
当天结束时:
<page ID : yyyymmdd>
page-users
阅读记录
users
集合汇总batch-read。<强>优点强>
page-visit
标志的延迟非常低。它使用的内存非常少,因为data-in-index命名空间不会占用Aerospike成本中每个对象的64B元数据之外的额外空间。例如,10M用户* 64B *复制因子2 = 1.2GB的DRAM。page-users
记录的最新用户ID。您只在页面上出现新的唯一用户时使用此操作(由page-visit
标志保护)。答案 1 :(得分:2)
超级博客&amp; Redis的强>
听起来你可能想要的是HyperLogLog。它是一种概率数据结构,允许您在有利于恒定大小的数据结构时权衡准确性。好消息是,数据结构的大小是有限的,并且是由数据结构大小决定的。使用1.5kB内存可以在正确答案的2%左右获得一个独特的计数。每个计数器使用更多数据,获得更高的准确性
此外,此功能内置于Redis中。
Hyperloglog Wiki页面: https://en.wikipedia.org/wiki/HyperLogLog
相关Redis博文: http://antirez.com/news/75
HyperLogLog&amp; VoltDB 强>
如果您对比Redis更好的HA支持更传统的RDBMS模型感兴趣,请查看VoltDB。它支持盒子上的极高吞吐量,也支持本机群集。此外,它还具有丰富的SQL支持,可以完成Redis所做的许多事情(以及更多)。它还内置了SQL中的hyperloglog支持。它还有一个例子,可以计算出与你正在做的非常相似的独特ID。
计算唯一ID的示例: https://github.com/VoltDB/voltdb/tree/master/examples/uniquedevices
答案 2 :(得分:0)