gpt4 book ai didi

redis - 使用 Redis 或 Aerospike 计算唯一身份访问者

转载 作者:IT王子 更新时间:2023-10-29 05:59:02 24 4
gpt4 key购买 nike

我正在尝试为不同的客户计算每个页面或其他事件(如点击等)等的唯一身份访问者。我打算做的是分配一个基于 cookie 的唯一 GUID,然后为每个事件调用 GUID 的 SADD。 redis key 将是 SET_[EVENTID]

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

但问题是如果有太多的事件或太多的用户那么 SADD 最终会在内存中有很多用户 ID我们预计每小时有 1000k+ 用户事件,涉及所有客户端,事件数量也将达到 100+

我想要一个意见是 redis 是正确的存储选择。由于请求数量过多,任何传统的 RDBMS 方法都行不通

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

最佳答案

RTB ,其中大量使用 Aerospike,frequency capping是需求方平台 (DSP) 的常见用例。用户看到特定广告或来自特定事件的广告的次数有上限。同时,跟踪总展示次数以及剩余预算。这些计数器通常具有较短的 TTL。

解决方案

您可以使用复合键 <page ID : user ID : yyyymmdd>作为特定用户是否访问过该页面的标志,具有 24 小时 TTL。这将存在于一组 page-visit 中在内存中,索引中的数据 namespace .

如果没有这样的键:

  • 在集合 page-visit 中用这个键创建一条新记录初始值为 1。
  • list-append key 的用户 ID <page ID : yyyymmdd>在集合中page-users .这个集合 ( page-users ) 可以存在于 stores 的命名空间中它的数据在 SSD 上。

如果这个键存在:

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

一天结束时:

  • 获取每个页面的计数,以及访问该页面的唯一用户列表。
  • 用键<page ID : yyyymmdd>读取记录从集合page-users
  • 组装batch-read针对 users根据此用户 ID 列表设置。

优势

  • 检查 page-visit标志是非常低的延迟。它使用很少的内存,如 data-in-index Aerospike 中每个对象的元数据成本超过 64B,命名空间不占用额外空间。例如,1000 万用户 * 64B * 复制因子 2 = 1.2GB DRAM。
  • 每页的唯一用户列表存储在 SSD 上,每 GB 的成本比 Redis 等纯内存数据库低得多。您只需为内存中的元数据条目为每个对象支付 64B primary index . list-append 操作非常高效,因为您只发送要附加到 page-users 的最新用户 ID。记录。仅当页面上出现新的唯一用户时才使用此操作(由 page-visit 标志保护)。
  • 所有这些记录都有 24 小时 TTL,因此您可以让它们过期。
  • Aerospike 是一个分布式键值数据库,它可以垂直扩展以使用服务器上的所有核心,也可以水平扩展,而您的应用程序不需要在新节点加入时进行分片。 data distribution由服务器自动处理并由客户端跟踪,无需更改您的应用程序。

关于redis - 使用 Redis 或 Aerospike 计算唯一身份访问者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41616082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com