Mysql AWS DynamoDB表格结构?
出于以下目的,在DynamoDB上构造表的最佳方法是什么 如果我制作了一个电影评论应用程序,我需要一个包含该电影评论的电影页面,以及包含用户在该应用程序上编写的所有评论的用户帐户页面 电影表Mysql AWS DynamoDB表格结构?,mysql,database,data-structures,amazon-dynamodb,nosql,Mysql,Database,Data Structures,Amazon Dynamodb,Nosql,出于以下目的,在DynamoDB上构造表的最佳方法是什么 如果我制作了一个电影评论应用程序,我需要一个包含该电影评论的电影页面,以及包含用户在该应用程序上编写的所有评论的用户帐户页面 电影表 ------------------------- | movie_id | movie_name | ------------------------- --------------------------------------------------- | review_id | movie_id
-------------------------
| movie_id | movie_name |
-------------------------
---------------------------------------------------
| review_id | movie_id | user_id | review_content |
---------------------------------------------------
审查表
-------------------------
| movie_id | movie_name |
-------------------------
---------------------------------------------------
| review_id | movie_id | user_id | review_content |
---------------------------------------------------
这对DynamoDB有意义吗?所以我可以查询
电影页面上的movie\u id
和movie\u name
和列表review\u content
bymovie\u id
然后
通过用户帐户页面上的用户id查询查看内容
提前感谢。与RDBMS一样,您不需要规范化数据,即不创建两个不同的表。NoSQL数据库的要点是尽可能将用例所需的大部分数据保存在一个表中 假设上述数据不会超过某个项目的400 KB最大限制(即DynamoDB中某个项目的最大限制),则可以将所有数据保存在一个表中 建议的数据模型:-
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
创建一个名为“电影”的表,其中包含所有必需的信息。用例的好处是您知道分区键,即movie\u id
。您可以使用DynamoDB中可用的查询API通过movie\u id
获取数据,这将为您提供为movie\u id
编写审阅注释的所有用户id
在这种方法中,您不需要从另一个表中单独获取审查数据,这将为您节省成本并提供更好的性能
电影表:
电影\u id==>分区密钥
用户id==>排序键
电影名称
复习
复习内容
注意:-
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\u id
的目的,除非您有一个单独的用例通过review\u id
获得详细信息
编辑-Json格式:-
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
user\u id
是一个排序键。它应该在评论
之外
{
"movie_id" : 1,
"user_id" : "1"
"movie_name" "Name of movie",
"review_comments" : ["A great movie", "I love it"]
}
分区和排序键:-
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
对于复合主键(分区键和排序键),必须
按此顺序提供两个元素:第一个元素必须
具有哈希的KeyType,第二个元素的KeyType必须为
射程
分区键和排序键—由两个键组成的复合主键
属性。第一个属性是分区键,第二个属性是
属性是排序键。DynamoDB使用分区键值作为
输入到内部哈希函数;哈希函数的输出
确定存储项的分区。所有带有
相同的分区键按排序顺序存储在一起
键值。两个项目可能具有相同的分区键
值,但这两个项必须具有不同的排序键值
在上面的模型中,我们有唯一标识项(即RDBMS中的记录)的哈希和排序键。散列键是movie\u id
,排序键是user\u id
。一个电影id可以有多个用户id,这些用户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\u comments
是一种Dynamodb列表或集合数据类型,可以有多个值。谢谢您或回复@conceptQuest我还没有使用Dynamodb,对您的表结构有疑问。如果一部电影有多个评论,数据是如何存储的?它将具有相同的数据,除了查看内容
?它来自同一个用户。如果同一个用户为同一部电影编写评论,您可以将“评论”属性设置为“设置”或“列表”数据类型,以便存储多个评论。更新了答案中的结构。用户id应该在评论之外。谢谢。这说明了一个用户如何进行多个审阅,但我如何使用该方法对多个用户在电影上进行审阅\u id:1
?我已更新了有关分区和排序键的详细信息。希望它能澄清你的疑问。若并没有,请阅读DynamoDB表的分区和排序键。