DynamoDB:按 PK 计算聚合组

问题描述 投票:0回答:1

我知道这在 DynamoDB 中是不可能的。

DynamoDB Streams 似乎是一种选择,但是......

我的奋斗涉及能够在特定时间段内创建聚合。我希望能够在任何时间点获得过去 24 小时内排名最高的 XX。

假设我有主题等类别(例如物联网、人工智能、AML 等)。我想统计一段时间内的热门话题,比如过去24小时或72小时内的前10个热门话题。基于这些主题的帖子数量。

如何使用 DynamoDB 实现这样的目标?

我使用 Topic 作为我的 PK,使用 Timestamp#UserId 作为 SK。因此,每次用户在某个主题上发表帖子时,都会创建一个新文档。我在文档中保存了一些属性,但这与这里无关。

假设:

  1. 每秒有数千个插入(即关于不同主题的数千个帖子)
  2. 获取热门话题并不是实时要求。它可以是每 1 小时左右计算一次并发布到其他地方的东西。

任何指针都将在最佳方法上受到赞赏,并且如果另一个堆栈更有意义。

干杯

database amazon-web-services amazon-dynamodb nosql amazon-dynamodb-streams
1个回答
0
投票

我最终这样做了:

Lambda 从同一函数写入 DDB 聚合表(和原始表)

聚合表将 TimestampHour 作为 PK,将 Country#City#Topic 作为 SK。属性:计数(暂时)

Lambda 函数将使用 PK 和 SK 找到正确的文档,并更新计数

EventBridge 每 1 小时运行一次,调用另一个 Lambda 函数,该函数将遍历聚合表中过去 24 小时的文档,并创建趋势分数(基于总计数)、排名前 10 名并按降序排列(针对每个国家、城市和全球) )。使用适当的简单结构将结果写入 S3 json 文件,以构建 URL 并检索每个国家、城市或全球的趋势主题。

S3 有 CloudFront 缓存其内容。所以应用程序直接查询。相当快。

S3 的 LCM 策略会使过去 24 小时内未更新的对象过期

目前看来可以解决问题,将继续优化。

© www.soinside.com 2019 - 2024. All rights reserved.