我有一个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
...
是否有一种很好的存储方式,而不必在客户端上筛选可能成千上万的记录和组?
答案 0 :(得分:0)
您看过Using Global Secondary Indexes for Materialized Aggregation Queries
您似乎有一个适用于Streams + lambda函数的教科书用例,用于计算和更新合计计数。
如果我没记错的话,AWS reInvent视频Advanced Design Patterns for Amazon DynamoDB会更详细一些,包括“ Top 10”功能。