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

下回見

Friday, April 05, 2013

苗場滑雪初體驗之SnowBoard摔不怕!! (4)


到達田代雪場之後就馬上去跟大伙兒會合!
這裡比苗場冷清許多啊~

先在綠線用heel side滑一趟熟悉路線,
萬萬沒想到這條線的尾巴是平的, 完全來不及從橫滑轉直板.
只好拆一隻腳慢慢飄過去超累低
又再滑了一趟練toe side不過沒什麼起色 囧

後來教練問我們要不要滑黑線, 因為也沒試過不知道怕就跟著去,
到了山頂才發現這真是踏馬的抖, 明明從山腳下看起來還好啊!!??
而且雪道已經有點變冰面板子卡不太進去所以我光是站起來就很不穩惹更別說要移動.
狂煞車大概滑個一兩公尺就會跌到,
此時再度覺得山上到山下是世界上最遙遠的距離 >____<
跌坐在半路的同時突然被人從後面撞上然後被抓住一起往下,
衝力超大, 定神之後發現原來是同學詹就兩個人合力用板子卡雪煞車,
雖然被撞一下還蠻痛的但是至少我快到底了(心裡因此高興了一下但回去發現屁股撞傷還破皮 囧)XD
接下來就沒那麼抖於是就順利的heel side滑下來囉~

後來看到J從黑線上滑下來看起來真的沒有很可怕啊(還敢講)


轉眼間就到午餐時間啦
我們就近在綠線旁的餐廳吃飯
男生大多點咖哩豬排我點了關東煮沾醬是黃芥末吶(上次吃到是在田子坊的丹咖啡)

下午教練就針對我們的弱點分別指導,

我就是狂練toe side落葉飄, 累就練c-turn轉heel side滑一段,

然後會不時的拍拍風景,

沒想到已經是最後一天啦!

最後我們搭田代纜車到山腳的巴士站, 纜車好大好大可以載好多人.

順利的搭上接駁車回苗場

在歸還設備之前同學們來了張合照. 是個有趣的旅程哦!


期待下次的雪之旅. 科科