针对多个哈希键的 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。 这有可能做到吗,还是我使问题变得比需要的更难?
第 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
向数据库添加新推文的过程:
- 通过为其创建新的 UUID 将推文写入推文表
- 从"关注者"表中获取关注提交新推文的用户的所有用户
- 在"RecentTweetsOfUser"和"RecentTweetsOfFriends"表中链接新推文
对于此解决方案,您不需要"以下"表,但我将其留在那里,因为将其保存为两个方向可能很好。