DynamoDB 索引、串流與最佳化

在 AWS 中使用資料儲存服務

Dunieski Otano

AWS Solutions Architect

做不到的查詢

  • 資料表:userId(分割鍵)、orderDate(排序鍵)
  • 需求:依電子郵件查詢訂單
  • 問題:無法以非鍵屬性查詢
  • 解法:Global Secondary Index(GSI)
    • 索引可支援多種存取模式

gsi

在 AWS 中使用資料儲存服務

Global Secondary Index(GSI)

  • 與基礎資料表有「不同的分割鍵」
  • 建表後可隨時新增
  • 僅支援最終一致讀取
  • 使用情境:以非主鍵屬性查詢

gsi_1

在 AWS 中使用資料儲存服務

Local Secondary Index(LSI)

  • 「相同分割鍵」、不同排序鍵
  • 必須在建立資料表時一併建立
  • 支援強一致讀取
  • 使用情境:分割區內的替代排序

lsi

在 AWS 中使用資料儲存服務

GSI 與 LSI:何時使用

  • GSI:不同分割鍵、可隨時新增、最終一致
  • LSI:相同分割鍵、建表時建立、強一致
  • 最常見:用 GSI 以取得彈性存取模式

gsi_or_lsi

在 AWS 中使用資料儲存服務

DynamoDB 的資料序列化

  • 問題:DynamoDB 不會儲存 Python 物件
  • 解法:序列化為 JSON 或二進位
  • JSON:簡單資料(dict、list)- 使用 json.dumps()
  • Base64:二進位資料(影像、權杖)

serialization

在 AWS 中使用資料儲存服務

用 DynamoDB Streams 擷取變更資料

  • Streams:所有資料表變更的有序日誌
  • 擷取:新增、更新、刪除
  • 用途:稽核日誌、複寫、觸發器
  • 以 Lambda 處理,進行即時反應

streams

在 AWS 中使用資料儲存服務

Time-to-Live:自動到期

  • TTL:到期後自動刪除項目
  • 在 TTL 屬性設定 Unix 時間戳
  • 適用:工作階段、暫時性權杖、快取
  • TTL 刪除不收費

ttl

在 AWS 中使用資料儲存服務

索引投影類型與查詢效能

  • KEYS_ONLY:僅鍵屬性,體積最小
  • INCLUDE:鍵+指定屬性
  • ALL:所有屬性,體積最大,免回表
  • 取捨:儲存成本 vs 查詢效能

index

在 AWS 中使用資料儲存服務

批次作業與交易

  • BatchGetItem:一次讀取最多 100 筆,最大 16MB
  • BatchWriteItem:一次寫入最多 25 筆
  • TransactWriteItems:跨最多 100 筆具 ACID
  • 用途:效率(批次)或一致性(交易)

batch

在 AWS 中使用資料儲存服務

一起來練習吧!

在 AWS 中使用資料儲存服務

Preparing Video For Download...