Chỉ mục, streams và tối ưu hóa trong DynamoDB

Sử dụng Kho dữ liệu trong AWS

Dunieski Otano

AWS Solutions Architect

Truy vấn không thể thực hiện

  • Bảng: userId (khóa phân vùng), orderDate (khóa sắp xếp)
  • Nhu cầu: Tìm đơn hàng theo email
  • Vấn đề: Không truy vấn được thuộc tính không phải khóa
  • Giải pháp: Global Secondary Index
    • Chỉ mục cho phép nhiều mẫu truy cập

gsi

Sử dụng Kho dữ liệu trong AWS

Global Secondary Index (GSI)

  • Khóa phân vùng khác so với bảng gốc
  • Có thể thêm bất kỳ lúc nào sau khi tạo bảng
  • Chỉ đọc nhất quán suy rộng
  • Dùng khi: Truy vấn thuộc tính không phải khóa chính

gsi_1

Sử dụng Kho dữ liệu trong AWS

Local Secondary Index (LSI)

  • Cùng khóa phân vùng, khóa sắp xếp khác
  • Phải tạo khi tạo bảng
  • Hỗ trợ đọc nhất quán mạnh
  • Dùng khi: Thứ tự sắp xếp thay thế trong phân vùng

lsi

Sử dụng Kho dữ liệu trong AWS

GSI vs LSI - khi nào dùng mỗi loại

  • GSI: Khóa phân vùng khác, thêm bất kỳ lúc nào, nhất quán suy rộng
  • LSI: Cùng khóa phân vùng, tạo khi tạo bảng, nhất quán mạnh
  • Phổ biến nhất: GSI cho mẫu truy cập linh hoạt

gsi_or_lsi

Sử dụng Kho dữ liệu trong AWS

Tuần tự hóa dữ liệu cho DynamoDB

  • Vấn đề: DynamoDB không lưu trữ đối tượng Python
  • Giải pháp: Tuần tự hóa sang JSON hoặc nhị phân
  • JSON: Dữ liệu đơn giản (dict, list) - json.dumps()
  • Base64: Dữ liệu nhị phân (ảnh, token)

tuần tự hóa

Sử dụng Kho dữ liệu trong AWS

DynamoDB Streams để ghi nhận thay đổi dữ liệu

  • Streams: Nhật ký có thứ tự của mọi thay đổi bảng
  • Ghi nhận: Thêm, cập nhật, xóa
  • Trường hợp dùng: Nhật ký kiểm toán, sao chép, trigger
  • Xử lý bằng Lambda để phản ứng thời gian thực

streams

Sử dụng Kho dữ liệu trong AWS

Time-to-Live để tự động hết hạn

  • TTL: Tự xóa mục sau khi hết hạn
  • Đặt Unix timestamp trong thuộc tính TTL
  • Phù hợp: Phiên, token tạm thời, bộ nhớ đệm
  • Không tốn phí cho xóa bằng TTL

ttl

Sử dụng Kho dữ liệu trong AWS

Kiểu chiếu chỉ mục và hiệu năng truy vấn

  • KEYS_ONLY: Chỉ thuộc tính khóa, kích thước nhỏ nhất
  • INCLUDE: Khóa + các thuộc tính chỉ định
  • ALL: Mọi thuộc tính, lớn nhất, không cần fetch thêm
  • Đánh đổi: Chi phí lưu trữ vs hiệu năng truy vấn

index

Sử dụng Kho dữ liệu trong AWS

Tác vụ theo lô và giao dịch

  • BatchGetItem: Đọc tối đa 100 mục, 16MB
  • BatchWriteItem: Ghi tối đa 25 mục
  • TransactWriteItems: ACID cho tối đa 100 mục
  • Dùng cho: Hiệu quả (batch) hoặc tính nhất quán (giao dịch)

batch

Sử dụng Kho dữ liệu trong AWS

Ayo berlatih!

Sử dụng Kho dữ liệu trong AWS

Preparing Video For Download...