当前位置:  开发笔记 > 后端 > 正文

使用Redis或Aerospike计算独特的访客

如何解决《使用Redis或Aerospike计算独特的访客》经验,为你挑选了1个好方法。

我试图为每个页面或其他事件(如点击等)计算不同客户端的独特访问者.我打算做的是为GUID分配一个唯一的基于cookie的GUID,然后为每个事件调用SADD.redis键将是SET_ [EVENTID]

如果我只想要用户数量,我可能会使用PFADD,但我的应用程序还需要知道谁是唯一用户

但问题是如果有太多的EVENT或太多的用户,那么SADD将在内存中结束大量的用户ID我们期望每小时1000k +用户事件,所有客户端,事件数量也将超过100+

我想要一个意见是redis正确的存储选择.由于请求数量庞大,任何传统的RDBMS方法都不起作用

我不确定是否有任何其他存储可以帮助像Aerospike



1> Ronen Botzer..:

在RTB中,Aerospike被大量使用,频率上限是需求侧平台(DSP)的常见用例.根据用户查看特定广告或特定广告系列的广告的次数设置上限.同时,跟踪总展示次数以及剩余预算.这些计数器通常具有短TTL.

您可以使用复合键作为特定用户是否访问过该页面的标志,使用24小时TTL.这将存在于page-visit内存中的数据索引命名空间中.

如果没有这样的密钥:

使用此键在集合中创建一个新记录,page-visit初始值为1.

list-将用户ID 附加到集合中的键page-users.此set(page-users)可以存在于将其数据存储在SSD上的命名空间中.

如果此密钥存在:

增加此键的记录数.这将为每个页面提供即时唯一访问者计数.

在一天结束时:

获取每个页面的计数,以及访问该页面的唯一用户列表.

使用该组中的键读取记录page-users

根据此用户标识列表对集合进行批量读取users.

好处

检查page-visit标志的延迟非常低.它使用非常少的内存,因为索引中的数据库命名空间不会占用Aerospike成本中每个对象的64B元数据之外的额外空间.例如,10M用户*64B*复制因子2 = 1.2GB的DRAM.

每页唯一用户列表存储在SSD上,每GB的成本比只有内存的数据库(如Redis)低得多.您只需为内存中的主索引中的元数据条目支付每个对象64B .list-append操作非常有效,因为您只发送要附加到page-users记录的最新用户ID .只有在页面上出现新的唯一用户时才会使用此操作(由page-visit标志保护).

所有这些记录都有24小时TTL,所以你可以让它们过期.

Aerospike是一个分布式键值数据库,可以垂直扩展以使用服务器上的所有核心,并且在新节点加入时不需要应用程序就需要进行分片.该数据分布是由服务器自动处理,没有您的应用程序需要改变客户端跟踪.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有