Sunday, April 07, 2013

Amazon DynamoDB - 踏出第一步

Amazon DynamoDB是一種Key-Value NoSQL的資料庫服務.
並且能夠透過簡易的設定來動態調整你所需要的目標throughtput.

不過事情不是字面上看起來那麼容易,
實際上是你必須要對DynamoDB的設計邏輯有一些瞭解,
才能讓你的系統真正能夠scalable.
或是更進而讓你抓到最適合的throughput設定, 把錢花在刀口上不會造成無謂的浪費.

[1] 開table
1. table命名
命名規則: 長度在3到255之間, 合法的字元包含a-z, A-Z, 0-9, '_', '-'和'.'

2. 指定primary key
有兩種類型的primary key可供選擇, 要用哪種就看你所要儲存的資料特行來作決定.
(1). Hash Type Primary Key — primary key僅由一hash attribute構成. 就如同我們常用的Hash Table.
(2). Hash and Range Type Primary Key — primary key由兩個部份組成, 一是hash attribute, 另一個是range attribute. 可以想成是Hash Table還有subkey(即range attribute)來找到屬於同一個hash值的東西, 而range是有經過排序的.

3. 設定throughput
除了幫table命名以及選擇primary key之外,
另外還需要指定這個table的throuthput(即每秒所需的讀寫量, 要注意不是次數!)
Amazon就是依照throughput來收費.
(1) Read capacity units — 單位是每秒對1KB大的資料有多少次consistent的讀取.
(2) Write capacity units — 單位是每秒對1KB大的資料有多少次寫入.

[2]如何計算不同Operation所需要的Capacity
由上面的定義可以知道影響throughput的因素有三個:
1. Item size: 資料大小, 計算方式為attribute名稱及value長度的總和

(1) get: 用來取符合primary key的item
計算單位是KB, 採用無條件進入(低消是1KB 囧)不是四捨五入
(2) batch get: 給定多個primary key, 用來一次拿取多個item, 可以跨不同table
計算方式為個別檔案分別無條件進入之後再加總
(3) query: 只能針對hash-and-range primary key table, 必須給定hash key並且對range下條件, 最多一次回1MB
計算方式為符合條件的結果全部加總再無條件進入
(4) scan: 可利用任意條件來尋找符合的item, 最多一次回1MB
計算方式為在scan過程中曾經被用來比較的所有item的大小, 過程中最多只會比較到累積1MB大的資料, 再回傳符合的項目
(5) put: 新增或完全取代原有的item
計算方式以新/舊item較大的size來算
(6) update: 修改已存在的item
計算方式以新/舊item較大的size來算
(7) delete: 刪除符合primary key的item
計算方式為此item的size

2. Expected read and write request rates: 預期的讀寫次數, 就是看你的使用情境以及架構設計而定囉~

3. Consistency: 資料的一致性
Amazon DynamoDB為了保證資料的可獲得性, 針對每個item都會有多份複製.
每次的寫入都會更新每個複製, 但這個步驟是需要花時間的.
很可能在讀取時, 你拿到的那份複製尚未被更新.
對此, Amazon DynamoDB有兩種資料一制性的設定以供選擇
(1) Eventually consistent read
當你讀取(get, batch get, query or scan)時, 如果之前不久有個寫入, 可能會拿到不是最新的資料.
但是稍候(通常會在1秒內)再次讀取就能夠獲得最近的更新.
讀取預設都是eventually consistent, 但有些operation可以指定為consistent read.
(2) Consistent read
當你讀取(僅限get和query)時, 一定會拿到最新的資料.
在計算read capacity unit時, 是以consistent read來計算,
若你是採用eventually consistent則只需要1/2的provision throughput

以下是簡單的範例:
Expected Item Size Consistency Desired Reads Per Second Provisioned Throughput Required
2KB Consistent 50 100
4KB Eventually Consistent 50 100

下回見

No comments:

Post a Comment