Amazon web services 如何设计DynamoDB表模式
我正在尽我最大的努力去理解DynamoDB数据建模,但我正在努力。我正在寻找一些帮助来建立我现在所拥有的。我觉得我有相当简单的数据,但我不知道我应该做什么来适应DynamoDB 我有两种不同类型的数据。我有一个游戏对象和一个团队统计对象。一场比赛代表了该周比赛的所有数据,球队统计数据代表了一个给定球队每周的所有统计数据 timeId的格式为年-周(例如2020-9) 我的访问模式是Amazon web services 如何设计DynamoDB表模式,amazon-web-services,database-design,nosql,amazon-dynamodb,Amazon Web Services,Database Design,Nosql,Amazon Dynamodb,我正在尽我最大的努力去理解DynamoDB数据建模,但我正在努力。我正在寻找一些帮助来建立我现在所拥有的。我觉得我有相当简单的数据,但我不知道我应该做什么来适应DynamoDB 我有两种不同类型的数据。我有一个游戏对象和一个团队统计对象。一场比赛代表了该周比赛的所有数据,球队统计数据代表了一个给定球队每周的所有统计数据 timeId的格式为年-周(例如2020-9) 我的访问模式是 1) Retrieve all games per timeId 2) Retrieve all games pe
1) Retrieve all games per timeId
2) Retrieve all games per timeId and by TeamName
3) Retrieve all games per timeId and if value = true
4) Retrieve all teamStats per timeId
5) Retrieve all teamStats by timeId and TeamName
到目前为止,我的建模尝试是:
PK: TeamName
SK: TimeId
这让我有了两份比赛的副本,因为每个队都有一份副本。它也只允许我按TimeId扫描所有teamStats。需要GSI帮忙吗?我想也许把PK改成
PK: GA-${gameId} / TS-${teamId}
SK: TimeId
我只是很困惑,文档对我帮助不大。看看您的访问模式,这是一种可能的表设计。我不确定它是否真的适用于您的
TimeId
,特别是对于(请参见下面的注释),但我希望它是您的一个良好起点
# Table
-----------------------------------------------------------
pk | sk | value | other attributes
-----------------------------------------------------------
TimeId | GAME#TEAM{teamname} | true | ...
TimeId | STATS#TEAM{teamname} | | ...
GameId | GAME | | general game data (*)
TeamName | TEAM | | general team data (*)
# Local Secondary Index
-------------------------------------------------------------------------------
pk from Table as pk | value from Table as sk | sk from Table + other attributes
-------------------------------------------------------------------------------
TimeId | true | GAME#Team{teamname} | ...
使用此表和本地二级索引,您可以通过以下查询满足所有访问模式:
主键为{timeId}的查询表
用pk:{timeId},sk:GAME#TEAM{teamname}查询表
使用pk:{timeId},sk:true查询LSI
带有pk:{timeId}的查询表,sk:以'STATS'开头。
带有pk:{timeId},sk:STATS#TEAM{teamname}的查询表
带有pk:{GameId}的查询表
带主键的查询表:{TeamName}
value=true
代表什么,但是为了使二级索引在我的模型中工作,您需要确保pk=TimeId
和value=true
的每个组合都是唯一的
要了解有关DynamoDB上单表设计的更多信息,请阅读Alex DeBrie的优秀文章。太好了!让我知道戈尔,一切都会好起来的