Amazon DynamoDB 介紹


數據模型概念 - Tables, Items, and Attributes

DynamoDB數據庫有表(tables),數據項(items)和屬性(attributes)構成。一個數據庫有若干張tables,一張表有若干items,每個數據項有若干attributes。

在關系型數據庫中,一張tables有columns組成。每個records都有相同的屬性。然而DynamoDB是NoSQL數據庫。也就是除了主鍵外,每個item都是可以任意自定義的,沒有columns的概念,也不受其束縛。唯一的要求就是不要每個item不要超過64 KB大小。這就是所有item name和item value加起來的大小不要超過64 KB。

每個item的attribute都是key-value的結構。每個attribute的value部分既可以使單值(single-valued)也可以是個組合(multi-value)。如果是組合的話,這個集合(set)中值是不允許有重復的。

我們來看一個例子,我們的網上商店,為了保存商品,我們這樣的tables結構:

Products( id, ...)

有個主鍵來標識這本書,然后用attributes來描述這本書的細節,比如:

{ 
   Id = 101                                       
   ProductName = "Book 101 Title"
   ISBN = "111-1111111111"
   Authors = [ "Author 1", "Author 2" ]
   Price = -2
   Dimensions = "8.5 x 11.0 x 0.5"
   PageCount = 500
   InPublication = 1
   ProductCategory = "Book" 
}                                    
{
   Id = 201 
   ProductName = "18-Bicycle 201"
   Description = "201 description"
   BicycleType = "Road"
   Brand = "Brand-Company A"
   Price = 100
   Gender = "M"
   Color = [ "Red", "Black" ]
   ProductCategory = "Bike"
}
{
   Id = 202 
   ProductName = "21-Bicycle 202"
   Description = "202 description"
   BicycleType = "Road"
   Brand = "Brand-Company A"
   Price = 200
   Gender = "M"
   Color = [ "Green", "Black" ]
   ProductCategory = "Bike"
}

注意商品Book的Aurthors和Bike的Color屬性,它們就是multi-value。這是一種類似JSON的結構(JSON-like)。需要注意的是DynamoDB不允許atrributes的value為空(null)或空字符串(empty string)。

主鍵 – Primary Key

當你創建表格時,除了表名(table name)以外還需要一個主鍵。DynamoDB支持下面兩種主鍵(primary keys):

*Hash類型的主鍵:

主鍵是某個attribute的hash值。DynamoDB會為這個主鍵atrributes創建一個unordered hash index。上例中Product有個id作為主鍵。他是這張表Hash屬性(attributes)。

*Hash and Range類型的主鍵:

主鍵是兩個attribute組合而成。第一個屬性是hash attributes。第二個屬性是range attribute。DynamoDB會在hash attribute上創建一個unordered hash index,在range attribute上創建一個sorted range index。例如,Amazon維護了一些論壇,每個論壇有許多討論話題(threads),每個thread又有許多回復(replies)。你可能這樣設計表格:

image

Thread和Reply表都有hash & range類型主鍵。對Thread表來說,每個forum都有若干個subjects。這樣ForumName就可以做hash atrribute,subject就可以做range attribute。注意,你必須考慮到,DynamoDB並不支持表格間的join查詢。例如你必須在Reply表的id中保存ForumName和subject。這樣你就可以parse這個id來查找相應的Forum和Subject。

DynamoDB的數據類型

DynamoDB支持兩種數據類型:

1,標量(scalar) —— 數字(Number)或字符串(String)
2,多值組合(multi-valued) —— 數字的組合(Number set)或字符串的組合(String set)

字符串 是以二進制UTF8來編碼的。主鍵以外的字符串的大小沒有什么限制。當然不能超過item大小(64 KB)。可以參見Limits in Amazon DynamoDB

當你使用ScanQuery接口來返回一個有序的結果時會用到字符串的比較。字符串的比較是基於ASCII值的比較。

數字 是正的或負的整數或小數。小數可以精確到小數點后38位。序列化后的數字是以String類型來傳給DynamoDB的,然而DynamoDB當數字一樣處理它們。

字符串集和數字集 需要注意的就是集合中不可以有重復的值,另外集合也是無序的

 

Reference

http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/DataModel.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM