单独的表格与地图列表-DynamoDB

时间:2018-11-26 00:18:59

标签: amazon-dynamodb

我需要你的帮助。我对数据库很陌生。

我正在尝试在DynamoDB中建立一个表格来存储有关电视节目的信息。看起来很简单明了,但是我不确定我在做什么是否正确。

到目前为止,我已经有了这种结构。我试图将有关电视节目的所有内容都放在一张桌子上。季节和情节包含在地图列表中的地图列表中。

分层太多了吗? 将来某些物品很大时会带来问题吗? 我应该将其中一些地图列表分隔到另一个表吗?

Shows table

1 个答案:

答案 0 :(得分:0)

理想情况下,您不应在DynamoDB的单行中放置可能无界的列表,因为最终可能会遇到400kb的项目大小限制。另外,如果您要阅读或撰写一个节目的一集,则消耗的容量就好像您正在阅读或撰写节目中的所有集。

看看adjacency list pattern。这是一个不错的选择,因为它可以让您轻松地找到节目中的季节和季节中的情节。您也可以查看this slide deck。在此过程的一部分中,它讨论的是分层数据,而这正是您要处理的数据。

如果您可以提供有关查询模式的更多信息,那么我可以为您提供有关如何在表中对数据建模的更多指导。

更新(2018-11-26)

根据您的评论,听起来您应该使用复合键来建立分层的1-N关系。

通过使用DataType:ItemId的复合排序键(其中ItemId是根据数据类型的不同格式),您将具有很大的灵活性。 这种方法将使您轻松获取节目中的季节,获取 all 季节中的所有剧集,获取特定季节中的所有剧集,甚至获取第1季,第5季和第2季之间的所有剧集第5集。

hash_key  | sort_key        | data
----------|-----------------|----------------------------
SHOW_1234 | SHOW:SHOW_1234  | {name:"Some TV Show", ...
SHOW_1234 | SEASON:SE_01    | {descr:"In this season, the main character...
SHOW_1234 | EPISODE:S01_E01 | {...
SHOW_1234 | EPISODE:S01_E02 | {...

以下是我提到的查询的各种关键条件表达式:

  • hash_key = "SHOW_1234" and sort_key begins_with("SEASON:") –四季皆宜
  • hash_key = "SHOW_1234" and sort_key begins_with("EPISODE:") –获得整个季节的所有剧集
  • hash_key = "SHOW_1234" and sort_key begins_with("EPISODE:S02_") –获得第2季的所有剧集
  • hash_key = "SHOW_1234" and sort_key between "EPISODE:S01_E5" and "EPISODE:S02_E5" –获取第1季第5集和第2季第5集之间的所有片段