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 - 注意事項

Sunday, October 20, 2013

西班牙葡萄牙我們來惹 (4) 快閃直布羅陀Gibraltar以及雪莉酒的故鄉Jerez

今天是Elia離開我們要踏上摩洛哥之旅的日子,
為了要趕上船班, 離開Ronda之後我們火速飛車前往直布羅陀!
在入境處排了長長的車陣讓我們十分憂心,
就這樣邊排邊吃著水果邊著急, 大概排了半個多小時這才順利踏上直布羅陀的領土.

[Gibraltar]
這裡的主要景點就是Rock of Gibraltar, 就是一個很大很大像山一樣大的石頭(非常爛的說明XD)
在這除了可以遠眺非洲俯看直布羅陀, 另外這裡還是一個生態保護區.

車子一路往上爬來到一處瞭望台能夠清楚俯看海港

接著來到Apes' Den, 這邊是直布羅陀猴子棲息的地方!
這裡的猴子都非常的我行我素, 不是攤在陽光下狂睡就是猛抓癢
據說要小心不要太接近跟它們互動以免遭到攻擊

媽媽猴幫小猴抓癢

有隻猴子爬到樹上練功, 都不怕摔下去勒

來個東施效顰

除了開車上來也可以選擇從山腳下搭纜車.

爬到山頂可以看到另一側的風景

直布羅陀算是英國屬地所以可以看到英國國旗哦!


接著我們就準備快閃離開, 出境也是要排隊排很久-_-
臨走前拍了極有特色的飛機跑,
因為國土小, 所以飛機跑道跟一般的車行道路是共用的,
每當有航班起降就會有欄杆封閉道路讓飛機安全通過, 真是很妙啊!


最後這就是Rock of Gibraltar的全貌.
by Elia


[Tarifa]
Tarifa已是西班牙的極南邊, 這裡不僅陽光炙熱, 連風吹來都濕濕黏黏的啊~
在這邊我們跟Elia道別, 她要前往我跟小大無緣的摩洛哥摟~


[Jerez de la Frontera]
Jerez以馬術及雪莉酒(事實上Jerez就是西班牙文的雪莉酒)聞名於世.
我們當然就是為了雪莉酒而來囉XD
可惜抵達時已是傍晚, 錯過了頂頂大名的Tio PePe酒莊的營業時間.

因為沒吃午餐已是餓極, 我們決定在這吃完晚飯後在趕路到預定的住宿地Sevilla.
可能是正好碰上了什麼慶典, 路上完全是萬頭鑽動的狀態
我們跟著人群走來到一處廣場, 轉角剛好有個小餐館看起來生意不錯就選它囉
在這我們不僅吃到超美味的Tortilla還如願喝到了Tio Pepe的雪莉酒
by LittleBig by LittleBig
兩個願望一次滿足真是超幸運

從天還是亮的吃到天黑, 出發之前我們灌了咖啡保持注意力
但無奈我還是在中途睡著了, 一醒來就有令人驚嚇的事情等著我啊~~~~~


View Larger Map

小大版:
直布羅陀Gibraltar & 雪莉酒的故鄉Jerez

[Day 3] Ronda(A) -> Gibraltar(B) -> Tarifa(C) -> Jerez(D) -> Seville(E)

西班牙葡萄牙我們來惹 (2) 太陽海岸 Costa del Sol: Nerja, Frigiliana, San Pedro
西班牙葡萄牙我們來惹 (3) 藍色小精靈村Juzcar以及鬥牛的故鄉Ronda
西班牙葡萄牙我們來惹 (5) Sevilla主教堂, 希拉達塔, 西班牙廣場
西班牙葡萄牙我們來惹 (7) Sevilla城堡

Sunday, September 22, 2013

西班牙葡萄牙我們來惹 (3) 藍色小精靈村Juzcar以及鬥牛的故鄉Ronda

離開Marbella我們驅車往山間行.

[Juzcar]
來到藍藍的村莊Juzcar, 這裡就是拍攝藍色小精靈的地方囉!

村子口有一間旅館.
by Elia
抵達的時候間又剛好是午休時間, 路上沒什麼人.
這裡除了房子是藍色的, 牆上也畫了很多藍色小精靈的角色.

另外也有藍色小精靈雕像, 在這邊我們也嘗試了多組雜誌封面情境照XD
by Elia
整個村莊.

畫有蘑菇的房子真是好搶戲啊!
by Elia
走走拍拍大概呆了一個多小時就往今天的住宿地點Ronda前進囉!

在山間穿梭中.



[Ronda]
在這兒也是花了好一番功夫才找到旅館TAT
安頓好再出來已是傍晚囉!
Ronda位於海拔750公尺的山間, 瓜達萊溫河(Guadalevín)流經此處形成深達100多公尺險峻的峽谷並將Ronda市區一分為二.
雖然一路奔波感覺有些疲憊, 但是呼吸著新鮮的空氣感覺微涼的氣溫又讓我活了過來.
by Elia
在峽谷邊眺望遠方的壯麗景色
黃黃的那棟是擁有絕佳視野的國營旅館(Prarador de Ronda)


太陽下山之後我們滿心期盼的來到以鬥牛士Pedro Romero命名的餐廳,

準備要來品嘗人生第一次的燉牛尾(還是一樣沒圖沒真相, 點小大版吧!)
但是不知是不是因為期待太高所以造成與現實落差太大, 牛尾是蠻嫩的但是並沒有讓人特別驚艷
點了tortilla送過來的竟然是omelette! 這就讓我們完全無言以對.
吃完之後就回到廣場上鄰近的小店買了甜點撫慰我們受創的心靈.

隔天我們在天還是濛濛亮就出發探索早晨的Ronda,
沿著新橋(Puente Nuevo)往舊城區走

橋的下方就是深不見底的峽谷


走啊走來到整修中的教堂(Colegiata de Sta. Maria La Mayor)

還有阿拉伯人所築的城牆遺跡(puerta y murallas de almocabar)

沿著谷地往回走霧濛濛的一片

途中經過了教堂還有長得相當怪異的阿拉伯浴場

太難拍所以就放棄了, 找到官方版的介紹影片有興趣的話可以瞧瞧

還不小心經過舊橋(Puente Viejo)

接著回到旅館吃了豐盛的早餐就準備去參觀鬥牛場啦!


鬥牛場外的牛雕像還真是精神抖擻啊~
by Elia
鬥牛場內靜悄悄, 很難想像鬥牛時黃沙翻騰, 人與牛之間心理戰的緊張氣氛, 觀眾席間高漲喧騰的情緒是怎樣的光景.

這裡便是牛衝出來的地方.

鬥牛場內還有牛隻飼養以及訓練的地方

還有馬廄.

鬥牛場兩側的走廊裝設了櫥窗, 有鬥牛的簡介以及展示了鬥牛士的服裝.
在紀念品商店買了幾張明信片,
這已是我們在Ronda最後一個景點!
by Elia
接著我們就要快馬加鞭趕路摟


View Larger Map
[Day 2] Nerja -> Marbella(A) -> Juzcar(B) -> Ronda(C)
[Day 3] Ronda(C) -> Gibraltar -> Tarifa -> Jerez -> Seville

小大版:
西班牙也有藍色小精靈 Juzcar
西班牙鬥牛之濫觴 Ronda

西班牙葡萄牙我們來惹 (2) 太陽海岸 Costa del Sol: Nerja, Frigiliana, San Pedro
西班牙葡萄牙我們來惹 (4) 快閃直布羅陀Gibraltar以及雪莉酒的故鄉Jerez
西班牙葡萄牙我們來惹 (5) Sevilla主教堂, 希拉達塔, 西班牙廣場
西班牙葡萄牙我們來惹 (7) Sevilla城堡

Sunday, September 15, 2013

Amazon DynamoDB - 注意事項

之前有講到你需要根據預估的使用者情境來決定table要怎麼設計以及讀寫throughput,
其實還有一些Dynamo本身的限制是我們在設計table時也需要列入考量的,

參考文件: Limits in Amazon DynamoDB


[資料的限制]
1. Item size: 單一筆資料的大小限制
- 64KB, 各別資料的attribute名稱跟值總和不能超過64K

2. Hash primary key attribute value: Hash key值的大小限制
- 2048 bytes

3. Range primary key attribute value: Range key值的大小限制
- 1024 bytes

4. Hash or hash-and-range primary key(Number of hash key values): Hash key的個數限制
- 一個table可以存放無限個hash key

5. Hash-and-range primary key(Number of range keys per hash value): Range key的限制
- 針對有設定local secondary index的table, 同一個hash key底下的range key, 其整體item的大小(原始table加上index table)不能超過10 GB

6. Maximum number of values in an attribute set: 單一筆資料能放的attribute個數限制
- 只要單一資料整體大小在64KB以內, 要有幾個attribute都可以.


[存取行為限制]
1. BatchGetItem
- 一次最多只能抓1MB以內的資料, 最多是100個item
- 如果超過這次能處理的量, response內會提供有UnprocessedKeys讓你可以在下一輪處理
- request可以跨不同的table

2. BatchWriteItem
- 一次最多只能新增或刪除1MB以內的資料, 最多是25個item
- 不支援資料更新
- 如果超過這次能處理的量, response內會提供有UnprocessedKeys讓你可以在下一輪處理
- request可以跨不同的table

3. Query
- 一次最多只能抓1MB以內的資料
- 如果超過這次能處理的量, response內會提供有LastEvaluatedKey讓你可以在下一輪處理
- 可以用ScanIndexForward來指定query的順序

4. Scan
- 一次最多只能檢查1MB以內的資料
- 如果超過這次能處理的量, response內會提供有LastEvaluatedKey讓你可以在下一輪處理
- 能夠透過切segment作Parallel Scan來加快尋找的速度


這些規則乍看起來沒什麼, 但最好要謹記在心
如果你有一個資料會越長越大(像是要記一個使用者買過甚麼東西),
那就千萬不能把他塞在只有hash key(用使用者ID)的table裡,(還記得64KB的限制嗎?)
要再加上range key(用購買時間或交易編號)把每一筆子資料拆開
大概就是這樣囉!

前兩集:
Amazon DynamoDB - 踏出第一步
Amazon DynamoDB - 使用table的最高指導原則

西班牙葡萄牙我們來惹 (2) 太陽海岸 Costa del Sol: Nerja, Frigiliana, San Pedro

經過了漫長的飛行(TPE->HKG->ZRH->AGP)終於來到西班牙囉!
在馬拉加機場繞啊繞花了好一番功夫才找到租車服務點
辦妥手續之後就開心的往Nerja前進囉!

路程約一個小時, 但因為Nerja鬧區被劃為徒步區, 單行道也不少, 要找到停車位還蠻困難的
今晚的住宿地點是英國老闆開的Hostal Miguel外觀看起來挺不錯低
by Elia
放好行李稍微梳洗一下我們又往鄰近的Frigiliana逛去

[Frigiliana]
Frigiliana是位在Nerja北方約六公里的山城.
本來打算在這裡午餐但是來的太晚 嗚嗚 初來乍到就嚐到午休時間的閉門羹
只好在街上亂走
by Elia

無意間走到了遊客中心, 順著樓梯爬到屋頂上視野超好
by Elia

俯瞰Frigiliana, 其實真的是個小小的地方
by Elia


[Nerja]
傷心的回到Nerja時已經接近傍晚囉~


這裡被稱作歐洲陽台(Balcón de Europa), 下方是斷崖過去在回教統治時期是個要塞
隔著海對岸就是非洲囉!


在這逗留了好一會兒, 等待著日落時的美景
by Elia

這時也餓得受不了啦! 就快速的小巷間移動
by Elia

找到TripAdvisor推薦的餐廳La Joya(這張是隔天吃完早餐補拍低)


昏黃的燈光感覺挺溫馨的, 然後立馬點了酒, 但是之後頓時感覺跌入地域!
原因是這餐廳老闆竟然是波蘭人!!? 難道我在本次旅程第一天的任務就出包了嗎(五雷轟頂)
不過好家在該有的西班牙菜系還是有而且頗好吃(這邊沒圖沒真相 請點小大版的遊記XD)


Tapas有臘腸火腿羊奶起司等等好多種變化(瞬間又飛上天堂惹!)
在海邊點海鮮總是不會出錯的, 烏賊跟花枝讚
豬肉稍微乾了一下但是口味很不錯(印象中是梅子還是桃子口味的沾醬)
也補充了很多蔬菜, 算是為今天劃下個完美的句點啊!!

隔天早晨大概八點醒來之後就爬到屋頂上想看看清晨的風光
房子一片白, 天還只有濛濛亮


跟親切的老闆問明了哪邊可以吃到西班牙油條churros就興沖沖的出發囉!

終於吃到大名鼎鼎的churros啦! 酥脆的油條裹上濃厚的巧克力真是絕配


早晨的Nerja十分寧靜, 大家都還再睡夢中吧! 我們靜悄悄的往海灘走


這張好像是剛遊完泳的中年阿伯幫我們拍的


到了Burriana海灘(Playa Burriana)太陽還躲著吶!

海鳥也在海灘上漫步

從海灘往回看


這個美麗的海灘由我們幾個人獨享真是太幸福了
於是在這狂拍了好多張XD

回程走另一條路, 碰到一棵開滿豔紅花朵的樹. 旁邊長了好多仙人掌超酷低!


沿著車道往市區走, 地勢越來越高, 景色也越來越威啊!
住宅們, 很多戶人家都有游泳池感覺過超爽的


遠眺海灘


Nerja就是有這樣美麗的風景跟宜人的氣候,
才會吸引許許多多歐洲各地來的遊客, 甚而讓有些人因此在此落地生根啊~

回到民宿退房後, 我們決定先繞去民宿老闆強力推薦的Marbella再繼續預定行程

[Marbella/San Pedro]
總之這兒就是個陽光沙灘跟有錢人滿街跑的地方
遊艇很多

還是遊艇


感覺狠厲害但不是我們的世界啊~
於是我們就挑個賣義大利麵跟披薩的餐廳打算隨便吃吃就趕快跑,(同樣還是沒圖沒真相, 請參考小大的遊記)
沒想到這家義大利麵跟披薩比預期中還要普通很多,
秉持著再怎麼不好吃的東西只要加辣就會變好吃的原則
我在披薩上面滴了幾滴辣椒橄欖油結果披薩的味道整個被提升到另外一個層次(一定要這麼誇張嗎XD)
讓我驚為天人啊! 於是我整個旅程中掛念著要帶一罐回來 哈

接下來我們就離開海岸地帶往山區走囉~

View Larger Map
[Day 1] Malaga(A) -> Nerja(B) -> Frigiliana(C) -> Nerja(B)
[Day 2] Nerja(B) -> Marbella(D) -> Juzcar -> Ronda

小大版:
- 西直葡首站 太陽海岸Nerja & Frigiliana
- 西直葡首站 Costa del Sol - Nerja & San Pedro

西班牙葡萄牙我們來惹 (3) 藍色小精靈村Juzcar以及鬥牛的故鄉Ronda
西班牙葡萄牙我們來惹 (4) 快閃直布羅陀Gibraltar以及雪莉酒的故鄉Jerez
西班牙葡萄牙我們來惹 (5) Sevilla主教堂, 希拉達塔, 西班牙廣場
西班牙葡萄牙我們來惹 (7) Sevilla城堡