
使用DynamoDb 前你該考慮的事情
Read this article in English here.

最近筆者在其中一個專案中初次接觸了DynamoDb, 發現它不像普通的NoSQL 資料庫如MongoDB
。本文會分享當中遇到的問題,以及解決方法(如有)。
不能儲存空白字串
DynamoDb 是NoSQL 的資料庫,不過它不能儲存空白字串,在JSON 物件的任何一層都不能。如果你的物件中有空白字串,在嘗試寫入時會拋出錯誤。
對此有一個解決方法,就是 aws-sdk
(可在 npm
上找到) 中有一個名為 convertEmptyValues
的選項,把它設為 true
後,所有空白字串在寫入時會被轉成 null
。
Query 返回的大小限制
DynamoDb 每個查詢最多只能返回1MB 資料,如果你的資料多於1MB, 返回結果中會有一個名為 last_evaluated_key
的值,於下一個查詢中包含它,就可以得到「下一頁」的資料。
批量寫入的限制
每個寫入操作最多只能包含25 列資料,十分不便。為應對這個問題,同時處理在多個節點同時寫入時因超出吞吐量的寫入失敗,我需要這樣做:
十分麻煩,對嗎?
查詢共有多少列資料
在其他資料庫中,通常都有十分簡單的方法查詢共有多少列的資料;不過在DynamoDb 中你只能這樣做:
- 使用
DescribeTable
API
它返回有關一個表格的資訊,包括當中含有多少列資料。不過這些資料只會每隔六小時更新一次,實在是不能接受。
2. 執行全表格掃描
把所有資料都取出來再計算吧,不過如果你的資料量多於1MB,可能要使用遞迴方法來取得所有資料了…
總結
DynamoDb 雖然強大,不過同時有一點取捨。如果你慣於使用其他NoSQL 資料庫如 MongoDb
,在轉用DynamoDb 前必須考慮以上數點。