AWS DynamoDB表结构?

时间:2017-03-13 17:08:34

标签: mysql database data-structures amazon-dynamodb nosql

为了以下目的,在DynamoDB上构建表的最佳方法是什么?

如果我制作一个电影评论应用,我需要一个电影页面,其中包含该电影和用户帐户页面的评论,其中包含用户在应用上写的所有评论。

电影表

-------------------------
| movie_id | movie_name |
-------------------------

评论表

---------------------------------------------------
| review_id | movie_id | user_id | review_content |
---------------------------------------------------

DynamoDB有意义吗?所以我可以查询 电影页面上的movie_idmovie_name以及review_content列表movie_id 然后 在用户帐户页面上review_content查询user_id

提前谢谢。

1 个答案:

答案 0 :(得分:2)

与RDBMS一样,您不需要对数据进行规范化,即不要创建两个不同的表。 NoSQL数据库的重点是如果可能的话,将用例的大部分必需数据保存在一个表中。

假设上述数据不会超过项目的 400 KB最大限制(即DynamoDB中项目的最大限制),您可以将所有数据保存在一个表中。

建议的数据模型: -

创建一个名为 Movie 的表格,其中包含所有必需的信息。您的用例的好处是您知道分区键,即movie_id。您可以使用DynamoDB中提供的查询API movie_id获取数据,这将为您提供已为user_ids撰写评论评论的所有movie_id人。

在这种方法中,您不能将评论数据与另一个表格分开,这将节省您的成本并提供更好的性能

电影表:

movie_id ==>分区键

user_id ==>排序键

MOVIE_NAME

REVIEW_ID

review_content

注意: -

我不理解review_id的目的,除非您有一个单独的用例来通过review_id获取详细信息。

编辑 - Json格式: -

user_id是一个SORT键。它应该在reviews之外。

{
  "movie_id" : 1,
  "user_id" : "1"   
  "movie_name" "Name of movie",
  "review_comments" : ["A great movie", "I love it"]                
}

分区和排序键: -

  

对于复合主键(分区键和排序键),您必须   按顺序提供两个元素:第一个元素必须   KeyType为HASH,第二个元素的KeyType必须为   范围。

     

分区键和排序键 - 由两个组成的复合主键   属性。第一个属性是分区键,第二个属性   attribute是排序键。 DynamoDB使用分区键值作为   输入到内部哈希函数;哈希函数的输出   确定将存储项目的分区。所有物品   相同的分区键按排序顺序存储在一起   核心价值。两个项目可能具有相同的分区键   值,但这两个项必须具有不同的排序键值。

在上面的模型中,我们有唯一标识项目的哈希和排序键(即RDBMS中的记录)。哈希键为movie_id,排序键为user_id。一个movie_id可以有多个user_id,它在DynamoDB表中形成多个项目(即RDBMS术语,称为记录)。

示例: -

movie id 1, user id 1, movie name 1, review comments 1
movie id 1, user id 2, movie name 1, review comments 2
movie id 2, user id 3, movie name 2, review comments 1

如前所述,review_comments是Dynamodb List或Set数据类型,可以有多个值。