Wednesday, November 06, 2013

Amazon DynamoDB - 關於資料的新增修改與刪除

前篇提到Amazon DynamoDB提供BatchWriteItem讓你一次新增或刪除(修改不行)多筆資料,
不過BatchWriteItem並不像單一PutItem/DeleteItem能透過設定檢查條件來決定操作是否合法,
於是就得要先用BatchGetItem將資料抓出來自行過濾後再把該新增或刪除的東西丟過去.


如果是要修改的話就只能用UpdateItem來做囉!
以下就是UpdateItem(有些參數是PutItem跟DeleteItem也能用的)的小心得

[Request - Action] 用來指定該如何更新這筆資料
有PUT, DELETE, and ADD三種方式而最終結果會跟這筆資料(指定的primary key)是否存在相關
1. Primary key存在
- PUT: 舊資料會被新的完全取代.
- DELETE: 會把這筆資料的某個屬性(attribute)刪掉, 但如果是對某個型態為集合(Set)的屬性給定某(或多)個值, 則會把這個值從集合中移除. ex: [A,B,C] - [B] -> [A,C]
- ADD: 屬性不存在會新增, 若是存在則會失敗. 有兩個例外, 一是屬性類型為數字的情況下會將給定的加上去, 若類型為集合則會將值加入集合中.
2. Primary key不存在
- PUT: 就是新增資料.
- DELETE: 沒事.
- ADD: 在屬性類型為數字或集合的情況會資料

[Request - Expected] 用來指定你希望在什麼條件下這個操作會成功
1. 存在(Exists)條件為否, 操作就只有在給定的屬性不存在的情況下才會成功.
2. 存在(Exists)條件為真, 操作就只有在給定的屬性等於某個值(不能不檢查值真的很煩)的情況下才會成功.

[Response - ReturnValues] 能順便讀取全部或部份資料
有NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW五種選擇.
1. NONE - 不回傳.
2. ALL_OLD - 回傳UpdateItem執行前完整的資料.
3. UPDATED_OLD - 回傳這個屬性更新前的值.
4. ALL_NEW - 回傳UpdateItem執行前完整的資料.
5. UPDATED_NEW - 回傳這個屬性更新後的值.

有一點是文件上沒特別提到的, 若是有指定回傳值那此次UpdateItem的所消耗的CapacityUnits會加倍(就是一個request同時讀寫的計價法, Amazon完全不讓自己虧到XD)哦!

我想這大概是最後一篇了吧XD
越用越覺得DynamoDB限制多多(所以這其實是抱怨文來著)
不過也沒想到寫了四篇(第一篇還是四月勒),
其實邊寫邊覺得很彆扭, 英文的文件吸收完在用中文寫出來怎麼都覺得不順啊!
而且很多字不知道該不該硬翻成中文, 就變成這樣中英夾雜的狀態.(汗)


前三集:
Amazon DynamoDB - 踏出第一步
Amazon DynamoDB - 使用table的最高指導原則
Amazon DynamoDB - 注意事項