我正在尝试设计dynamodb模式/表,并尝试根据用例和查询模式找到PK / SK,LSI,GSI。
我是DynamoDB的新手,尝试了几种表模式,但我混合了很多东西。
我的用例如下,有一个问题或挑战板,用户可以在一个管理员下玩。可能有许多这样的管理员,并且特定管理员下的用户。那么每个用户将被标记为多个挑战。例如
admin_id --- 1对多-> users_id --1对1-> challenges_id
挑战可以分类如下
现在用户可以对
等挑战采取一些措施现在我想出了下表和json格式。
{ “ TableName”:“挑战”,
"Item": {
"challenges_id": { "123456" },
"user_id": { "123456" },
"admin_id": { "123456" },
"challenges_type": { "Very easy", "Easy", "Moderate", "Somewhat hard", "Hard", "Very Hard" },
"challengesDesc": { "Some desc" },
"ActionCd": {"solved", "Pending", "InProgress", "yet_to_start", "will_start_tomorrow", "Not_Application"},
}
}
我认为Challenge_id可能是PK。 基本查询模式如下。
如果需要提供更多详细信息,请告诉我。
答案 0 :(得分:1)
您可以使用以下内容作为您的模式
| pk | sk | status | user | challenges_type |
| admin1 | users#user1#Very easy | solved | user1 | admin1#solved | ... some more metadata
| admin1 | users#user1#Moderate | InProgress| | admin1#InProgress | ... some more metadata
| admin2 | users#user3#Very easy | solved | | admin2#solved | ... some more metadata
GSI1 pk:用户sk:challenges_type
用例
获取为特定管理员标记给每个用户的所有挑战
Select * where pk=admin1
获取所有结果并计算
按操作类型获取特定用户订单的所有挑战
Select * from GSI1 where pk=user1
获取特定管理员每个用户的所有挑战计数
Select * from GSI1 where pk=user1 and sk beginswith admin1
这将为您提供有关如何构建dynamodb模式的基本思想。