在 DynamoDB 中建模计数排行榜的最佳设计模式

Posted

技术标签:

【中文标题】在 DynamoDB 中建模计数排行榜的最佳设计模式【英文标题】:Best design pattern for modeling leaderboard of counts in DynamoDB 【发布时间】:2022-01-09 11:01:35 【问题描述】:

我正在尝试统计房间内的人数。目前,人们可以加入和离开房间(多对多)的关系。我目前正在通过 GSI 的双向roomId <-> userId PK/SK 交换对此进行建模。所以我可以查出谁在房间里,以及用户在哪个房间里。

但是,我还想知道按人口计算的前 N ​​个房间。为此,我可以在用户进入时增加每个房间的计数,并在他们离开时减少(比如在另一个表中),但随后我必须进行额外的写入。我觉得保持同步也可能存在问题,也许 DynamoDB 流可以处理同步问题。

想到更好的方法?

例如

PK SK
user1 room1
user1 room2
user2 room2
user3 room2

topRooms(n) = room1: 1, room2: 3

【问题讨论】:

【参考方案1】:

如何使用物化聚合查询来执行此操作? https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-gsi-aggregation.html

所以基本上你要做的就是使用流并为其附加一个 lambda 函数。

每当有人加入或离开房间时,都会将其写入数据库,数据库会触发 lambda 函数并进行聚合。

【讨论】:

以上是关于在 DynamoDB 中建模计数排行榜的最佳设计模式的主要内容,如果未能解决你的问题,请参考以下文章

使用DynamoDB建模N到N.

RedShift 或 DynamoDb

同步计数器设计与建模

DynamoDB 中原子计数器的可靠性

软件需求分架构设计与建模最佳实践

游戏排行榜前 10 名得分 dynamoDB nodejs sdk 查询