DynamoDB 可以當作快取使用嗎?
可以。DynamoDB 快速的鍵值查找與 TTL,讓它成為一個紮實的持久性快取 — 適合放工作階段、token 與計算結果。若要次毫秒級的讀取,就把它跟 DynamoDB Accelerator(DAX)配成一對;DAX 是一個全受管的記憶體內寫穿式快取,擋在資料表前面,以微秒回傳最終一致的讀取,而且完全不需要快取失效的程式碼。
把 DynamoDB 當作持久性快取
因為讀取是依索引鍵、且延遲是個位數毫秒,DynamoDB 很適合當作持久的快取層。TTL 會替你讓過期的項目失效,所以快取起來的工作階段或預先算好的結果會自己清乾淨。
加上 DAX 換取微秒級
DAX 是一個坐在 DynamoDB 前面的記憶體內快取:
- 讀穿/寫穿 — 它替你管理填充與失效。
- 微秒級讀取 — 對最終一致的讀取最多可有 10 倍的改善。
- API 相容 — 應用程式只需要極少的改動。
DAX 在替你省錢之前先花你多少
DAX 是一筆買延遲的支出。把價錢算出來,你會發現除非讀取量非常大,否則它根本不會開始省錢。
在 us-east-1,一個 dax.t3.small 節點是每小時 $0.04,而 AWS 建議正式環境至少跨可用區域擺三個,因為三個才是讓叢集具備容錯能力的數字。那就是每月 $87.60。以隨需模式對一個 4 KB 以內的項目做一次最終一致讀取要價 $0.0000000625,所以同樣的 $87.60 可以直接向資料表買到 14 億次讀取,或者整個月持續每秒 533 次。
而且那個數字還美化了 DAX:它假設每一次讀取都命中快取,但實務上每一次未命中都會在叢集費用之上再多算一次資料表讀取。單節點的開發用叢集是每月 $29.20,也就是每秒 178 次讀取,而 AWS 不建議正式環境少於三個節點,因為一或兩個節點的叢集可能直接失去它快取的資料。
TTL 免費,但不即時
自己讓一筆項目過期要花掉一個寫入單位;對 1 KB 以內的項目做一百萬次 DeleteItem 是 $0.63。TTL 做同樣的工作卻不消耗寫入輸送量,這就是在快取場景裡採用它的務實理由。
時機才是那個陷阱。AWS 通常在到期後的幾天內刪除過期項目,所以你的應用程式認定已經消失的項目,儲存費還在照算,而帳單追的是刪除延遲,而不是你設的那個 TTL。以每秒 1,000 個 1 KB 的項目、一小時 TTL 來快取,存活集合是 3.4 GB,每月 $0.86;而兩天的延遲會在旁邊停放 165 GB 的死項目,每月 $41.19。過期項目在被實際移除之前,也還會持續出現在 Query 與 Scan 結果裡,所以請在讀取時對到期屬性做篩選,不要盲目相信它。
何時適合,何時不適合
它非常適合能容忍最終一致性的重讀取工作負載(DAX 提供的是最終一致的資料)。如果你每一次讀取都需要強一致性,就直接走資料表。DAX 節點彼此之間也是最終一致地複寫,所以打到同一個叢集的兩個用戶端,可能會短暫地對同一個索引鍵讀到不同的值。
深入了解
請讀 DynamoDB TTL 與 DynamoDB 一致性。下載 DynoTable 來檢視你的快取資料表。
參考資料
- In-memory acceleration with DynamoDB Accelerator (DAX) — Amazon DynamoDB Developer Guide
- DAX: How it works — Amazon DynamoDB Developer Guide
- Using time to live (TTL) in DynamoDB — Amazon DynamoDB Developer Guide
- Sizing your DAX cluster — Amazon DynamoDB Developer Guide — 三節點的正式環境建議,已於 2026-07-28 重新查核。
- Amazon DynamoDB pricing — DAX 的節點小時費率與請求單位費率。
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。
成本計算於 2026-07-28。DAX 的節點小時費率讀自 AWS Price List API(us-east-1、dax.t3.small、$0.040),讀取、寫入與儲存費率則來自我們定價計算機所同步的同一份來源;上方的算式是我們自己的,而每一項輸入都寫在這一頁上。