针对多个哈希键的 DynamoDB 查询

本文关键字:DynamoDB 查询 哈希键 | 更新日期: 2023-09-27 18:34:26

我正在努力解决如何在 DynamoDB 中对查询进行建模的问题。 让我们以推特为例,我想回答的问题是,因为我关注的人给我看了最近的 20 条推文。

我有 3 个发电机表:

Users
UserUID - Hash
Handle
Following
UserUID - Hash
FollowingUserUID - Range
Tweets
UserUID - Hash
Tweet
PostedDate - Range

我需要做什么步骤来回答这个问题,对于UserUID 1234关注的人,显示了最近的20条推文。

我有的步骤:

步骤1:获取UserUID 1234关注的所有人的列表。

第 2 步(我迷路的地方(:对于 Id 列表,请向我显示最近的 20 条推文。

我不确定如何构建第二个查询,因为我需要过滤 Id 列表中的哈希键并使用限制和可能的范围过滤器。 正因为如此,我认为我不能使用 BatchGetItemRequest。 这有可能做到吗,还是我使问题变得比需要的更难?

针对多个哈希键的 DynamoDB 查询

第 2 步(我迷路的地方(:对于 Id 列表,请向我显示最近的 20 条推文。

这个问题没有直接的答案,因为我们不能只查询"ORDER BY PostedDate"

在 DynamoDB 中高效执行如此复杂映射的唯一可能解决方案是将数据冗余存储。当然,你可以得到每个朋友的最新20条推文,然后在你的网络应用程序中对其进行排序,就像你已经提议的那样。但是猜猜有人关注 1000 个用户,这将导致一个用户请求的 1000 个查询。

因此,我想出的一个可能的解决方案如下:

Users
 UserUID - Hash
 Handle
Following
 UserUID - Hash
 FollowingUserUID
FollowedBy
 UserUID - Hash
 FollowedByUserUID
RecentTweetsOfFriends
 UserID - Hash
 PostedDate - Range
 TweetUUID
RecentTweetsOfUser
 UserID - Hash
 PostedDate - Range
 TweetUUID
Tweets
 TweetUUID - Hash
 Tweet
 UserID
 PostedDate

数据库添加新推文的过程:

  1. 通过为其创建新的 UUID 将推文写入推文表
  2. 从"关注者"表中获取关注提交新推文的用户的所有用户
  3. 在"RecentTweetsOfUser"和"RecentTweetsOfFriends"表中链接新推文

对于此解决方案,您不需要"以下"表,但我将其留在那里,因为将其保存为两个方向可能很好。