首页 > 解决方案 > Dynamodb 表上的聚合统计信息

问题描述

我有一个 DynamoDB 表,每天接收约 1500 万条浏览记录,例如:

{"domain": "google.com", "url": "https://google.com/search?q=test1", "user_id": 10, "action": "allowed"}
{"domain": "google.com", "url": "https://google.com/search?q=test2", "user_id": 10, "action": "allowed"}
{"domain": "facebook.com", "url": "https://www.facebook.com/feed", "user_id": 10, "action": "blocked"}

个人记录的历史并不那么重要,有一个 30 天的 TTL 来保存它们。我正在努力思考的是聚合 和 的顶级域的最佳allowed方式blocked

如果是每天的基本计数,我可以为一天创建一个唯一的分区键,然后计数和递增:

User-10-Totals, "2019-11-16", { "count": 2 }

但问题是每个域都有自己的计数,每天可能有数千个独特的域以及它们的计数。

我最终希望在可配置的时间段内拥有前 10 个域。

Allowed for the last 30 days:
 1. google.com
 2. other.com
 ...

Blocked for the last 30 days:
 1. facebook.com
 2. other2.com
 ...

有没有一种很好的方法来存储它而不必在客户端上筛选潜在的数千条记录和组?

标签: amazon-dynamodbbigdataamazon-kinesis

解决方案


您是否看过使用全局二级索引进行物化聚合查询

您似乎有一个用于 Streams + lambda 函数的教科书用例来计算和更新聚合计数。

如果我没记错的话,AWS reInvent 视频Amazon DynamoDB 的高级设计模式更详细地介绍了包括“十大”功能在内的一些细节。


推荐阅读