Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何设计DynamoDB表模式_Amazon Web Services_Database Design_Nosql_Amazon Dynamodb - Fatal编程技术网

Amazon web services 如何设计DynamoDB表模式

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

我正在尽我最大的努力去理解DynamoDB数据建模,但我正在努力。我正在寻找一些帮助来建立我现在所拥有的。我觉得我有相当简单的数据,但我不知道我应该做什么来适应DynamoDB

我有两种不同类型的数据。我有一个游戏对象和一个团队统计对象。一场比赛代表了该周比赛的所有数据,球队统计数据代表了一个给定球队每周的所有统计数据

timeId的格式为年-周(例如2020-9)

我的访问模式是

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} | ...
使用此表和本地二级索引,您可以通过以下查询满足所有访问模式:

  • 按时间ID检索所有游戏:

    主键为{timeId}的查询表

  • 根据timeId和团队名称检索所有游戏

    用pk:{timeId},sk:GAME#TEAM{teamname}查询表

  • 检索每个timeId的所有游戏,如果值为true

    使用pk:{timeId},sk:true查询LSI

  • 检索每个timeId的所有teamStats

    带有pk:{timeId}的查询表,sk:以'STATS'开头。

  • 按timeId和TeamName检索所有teamStats

    带有pk:{timeId},sk:STATS#TEAM{teamname}的查询表

  • *:我还添加了以下两项,因为我假设在某些情况下,您也希望检索有关特定游戏或团队的一般信息。这只是基于我的经验的假设,在您的情况下可能没有必要:

  • 检索一般游戏信息

    带有pk:{GameId}的查询表

  • 检索一般团队信息

    带主键的查询表:{TeamName}

  • 注意:我不知道
    value=true
    代表什么,但是为了使二级索引在我的模型中工作,您需要确保
    pk=TimeId
    value=true
    的每个组合都是唯一的


    要了解有关DynamoDB上单表设计的更多信息,请阅读Alex DeBrie的优秀文章。

    太好了!让我知道戈尔,一切都会好起来的