DynamoDB 索引、串流與最佳化
在 AWS 中使用資料儲存服務
Dunieski Otano
AWS Solutions Architect
做不到的查詢
- 資料表:userId(分割鍵)、orderDate(排序鍵)
- 需求:依電子郵件查詢訂單
- 問題:無法以非鍵屬性查詢
- 解法:Global Secondary Index(GSI)
Global Secondary Index(GSI)
- 與基礎資料表有「不同的分割鍵」
- 建表後可隨時新增
- 僅支援最終一致讀取
- 使用情境:以非主鍵屬性查詢
Local Secondary Index(LSI)
- 「相同分割鍵」、不同排序鍵
- 必須在建立資料表時一併建立
- 支援強一致讀取
- 使用情境:分割區內的替代排序

GSI 與 LSI:何時使用
- GSI:不同分割鍵、可隨時新增、最終一致
- LSI:相同分割鍵、建表時建立、強一致
- 最常見:用 GSI 以取得彈性存取模式
DynamoDB 的資料序列化
- 問題:DynamoDB 不會儲存 Python 物件
- 解法:序列化為 JSON 或二進位
- JSON:簡單資料(dict、list)- 使用 json.dumps()
- Base64:二進位資料(影像、權杖)
用 DynamoDB Streams 擷取變更資料
- Streams:所有資料表變更的有序日誌
- 擷取:新增、更新、刪除
- 用途:稽核日誌、複寫、觸發器
- 以 Lambda 處理,進行即時反應
Time-to-Live:自動到期
- TTL:到期後自動刪除項目
- 在 TTL 屬性設定 Unix 時間戳
- 適用:工作階段、暫時性權杖、快取
- TTL 刪除不收費
索引投影類型與查詢效能
- KEYS_ONLY:僅鍵屬性,體積最小
- INCLUDE:鍵+指定屬性
- ALL:所有屬性,體積最大,免回表
- 取捨:儲存成本 vs 查詢效能
批次作業與交易
- BatchGetItem:一次讀取最多 100 筆,最大 16MB
- BatchWriteItem:一次寫入最多 25 筆
- TransactWriteItems:跨最多 100 筆具 ACID
- 用途:效率(批次)或一致性(交易)
Preparing Video For Download...