[英]AWS DynamoDB table structure?
為了達到以下目的,在DynamoDB上構建表的最佳方法是什么?
如果我制作了一個用於電影評論的應用程序,那么我需要一個電影頁面,其中包含該電影的評論,以及用戶帳戶頁面,其中包含用戶在該應用程序上撰寫的所有評論。
電影桌
-------------------------
| movie_id | movie_name |
-------------------------
審查表
---------------------------------------------------
| review_id | movie_id | user_id | review_content |
---------------------------------------------------
對於DynamoDB有意義嗎? 這樣我就可以查詢movie_id
和movie_name
電影頁面,名單上review_content
通過movie_id
然后查詢review_content
由user_id
用戶帳戶頁面上。
先感謝您。
像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"]
}
分區和排序鍵:-
對於復合主鍵(分區鍵和排序鍵),您必須按順序提供恰好兩個元素:第一個元素必須具有HASH的KeyType,第二個元素必須具有RANGE的KeyType。
分區鍵和排序鍵-由兩個屬性組成的復合主鍵。 第一個屬性是分區鍵,第二個屬性是排序鍵。 DynamoDB使用分區鍵值作為內部哈希函數的輸入。 哈希函數的輸出確定將存儲項目的分區。 具有相同分區鍵的所有項目都按排序鍵值的排序順序存儲在一起。 兩個項目可能具有相同的分區鍵值,但是這兩個項目必須具有不同的排序鍵值。
在上述模型中,我們具有唯一標識項(即RDBMS中的記錄)的哈希和排序鍵。 哈希鍵是movie_id
,排序鍵是user_id
。 一個movie_id可以具有多個user_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數據類型,可以具有多個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.