在 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 中建模计数排行榜的最佳设计模式的主要内容,如果未能解决你的问题,请参考以下文章