Dynamodb表上的汇总统计

时间:2019-11-17 00:27:12

标签: amazon-dynamodb bigdata amazon-kinesis

我有一个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。 我想考虑的是汇总allowedblocked的顶级域名的最佳方法。

如果这是每天的基本计数,则可以为日期以及计数和增量创建唯一的分区键:

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
 ...

是否有一种很好的存储方式,而不必在客户端上筛选可能成千上万的记录和组?

1 个答案:

答案 0 :(得分:0)

您看过Using Global Secondary Indexes for Materialized Aggregation Queries

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

如果我没记错的话,AWS reInvent视频Advanced Design Patterns for Amazon DynamoDB会更详细一些,包括“ Top 10”功能。