我知道这在 DynamoDB 中是不可能的。
DynamoDB Streams 似乎是一种选择,但是......
我的奋斗涉及能够在特定时间段内创建聚合。我希望能够在任何时间点获得过去 24 小时内排名最高的 XX。
假设我有主题等类别(例如物联网、人工智能、AML 等)。我想统计一段时间内的热门话题,比如过去24小时或72小时内的前10个热门话题。基于这些主题的帖子数量。
如何使用 DynamoDB 实现这样的目标?
我使用 Topic 作为我的 PK,使用 Timestamp#UserId 作为 SK。因此,每次用户在某个主题上发表帖子时,都会创建一个新文档。我在文档中保存了一些属性,但这与这里无关。
假设:
任何指针都将在最佳方法上受到赞赏,并且如果另一个堆栈更有意义。
干杯
我最终这样做了:
Lambda 从同一函数写入 DDB 聚合表(和原始表)
聚合表将 TimestampHour 作为 PK,将 Country#City#Topic 作为 SK。属性:计数(暂时)
Lambda 函数将使用 PK 和 SK 找到正确的文档,并更新计数
EventBridge 每 1 小时运行一次,调用另一个 Lambda 函数,该函数将遍历聚合表中过去 24 小时的文档,并创建趋势分数(基于总计数)、排名前 10 名并按降序排列(针对每个国家、城市和全球) )。使用适当的简单结构将结果写入 S3 json 文件,以构建 URL 并检索每个国家、城市或全球的趋势主题。
S3 有 CloudFront 缓存其内容。所以应用程序直接查询。相当快。
S3 的 LCM 策略会使过去 24 小时内未更新的对象过期
目前看来可以解决问题,将继续优化。