AWS

Ôn thi AWS DVA-C02: DynamoDB TTL

📌 Giới thiệu

Trong nhiều ứng dụng thực tế, bạn có thể cần xóa tự động các bản ghi không còn giá trị sau một khoảng thời gian nhất định – ví dụ:

  • Phiên đăng nhập đã hết hạn
  • Token xác thực tạm thời
  • Dữ liệu cache
  • Giỏ hàng chưa thanh toán sau 30 phút

Thay vì viết script dọn dẹp, DynamoDB TTL (Time To Live) giúp bạn tự động xóa bản ghi sau thời điểm xác định.


🔍 TTL trong DynamoDB là gì?

TTL là một tính năng giúp bạn đánh dấu một cột kiểu số (Number) trong mỗi bản ghi đại diện cho thời điểm hết hạn (expiration timestamp). Sau thời gian này, bản ghi đó sẽ bị xóa tự động bởi DynamoDB, không cần tác động thủ công.

✅ Điểm chính:

  • Là một timestamp UNIX (epoch time) – đơn vị tính là giây.
  • DynamoDB sẽ kiểm tra định kỳ và xóa các mục đã hết hạn.
  • Quá trình xóa là asynchronous, không xảy ra đúng thời điểm bạn chỉ định.
  • Không ảnh hưởng đến RCU/WCU hoặc truy vấn đang chạy.

🛠 Cách cấu hình TTL

Bước 1: Chọn một cột kiểu Number làm TTL

Ví dụ:

{
  "sessionId": "abc-123",
  "userId": "u-789",
  "ttl": 1712334000  // UNIX timestamp
}

Bước 2: Kích hoạt TTL cho bảng

Trên AWS Console:

  1. Vào bảng DynamoDB
  2. Chọn tab “TTL”
  3. Chỉ định tên thuộc tính (ví dụ: ttl)
  4. Kích hoạt TTL

Hoặc dùng AWS CLI:

aws dynamodb update-time-to-live \
  --table-name YourTableName \
  --time-to-live-specification "Enabled=true, AttributeName=ttl"

🧠 Cách hoạt động chi tiết

  • DynamoDB kiểm tra giá trị của trường TTL trong mỗi bản ghi.
  • Nếu ttl < thời gian hiện tại, hệ thống đánh dấu bản ghi là expired.
  • Sau đó, hệ thống sẽ tự động xóa bản ghi này trong vài phút đến vài giờ.
  • Bản ghi bị xóa không thể khôi phục.

⏱️ TTL không đảm bảo xóa ngay lập tức sau thời điểm expire. Đây là một cơ chế eventual cleanup.


💡 Use Cases phổ biến

Tình huốngMô tả
Phiên người dùngTự động xóa phiên sau 30 phút không hoạt động
OTP (One Time Password)Hết hạn sau 60 giây
Caching tạm thờiGiữ dữ liệu 5–10 phút
Lưu trữ log tạm thờiXóa sau 24 giờ
Giỏ hàng chưa thanh toánXóa sau 1 giờ

🛡️ Các lưu ý quan trọng khi ôn thi DVA-C02

Hạng mụcGhi nhớ
TTL fieldBắt buộc là Number (UNIX epoch timestamp)
Chỉ định một fieldChỉ có thể có một trường TTL cho mỗi bảng
Xóa bất đồng bộKhông xóa đúng ngay thời điểm expire
Không ảnh hưởng đến throughputQuá trình xóa không tính WCU/RCU
TTL không trigger StreamsNhưng nếu bạn bật Stream, xóa bởi TTL vẫn ghi vào stream (có thể xử lý event sau khi xóa)

📚 Câu hỏi luyện thi ví dụ

❓ Câu 1:

Bạn xây dựng ứng dụng lưu phiên người dùng. Mỗi phiên nên hết hạn sau 1 giờ. Làm thế nào để tự động xóa phiên mà không cần lambda?

A. Bật TTL và thêm trường expiration dạng epoch time
B. Dùng EventBridge Scheduler để xóa theo giờ
C. Dùng Lambda function với CloudWatch cron
D. Tăng WCU để đảm bảo ghi ghi đè đúng hạn

Đáp án đúng: A


❓ Câu 2:

Điều nào sau đây đúng về TTL trong DynamoDB?

A. TTL xóa bản ghi ngay khi timestamp đến hạn
B. TTL ảnh hưởng đến billing vì xóa sử dụng WCU
C. TTL chỉ hỗ trợ loại dữ liệu kiểu chuỗi (String)
D. TTL hỗ trợ tự động xóa dữ liệu cũ và không cần cấu hình thêm sau khi kích hoạt

Đáp án đúng: D


🔁 So sánh TTL và Lambda cleanup

Tiêu chíTTLLambda
Tự động❌ (phải viết logic)
Đơn giản
Kiểm soát chính xác thời gian xóa❌ (eventual)
Trigger thêm hành động❌ (cần kết hợp stream)

🧪 Tips thi thực chiến

  • TTL hoạt động với mọi bảng DynamoDB tiêu chuẩn hoặc on-demand
  • TTL có thể kết hợp với DynamoDB Streams để log lại bản ghi bị xóa
  • Trong bài thi, nếu thấy yêu cầu “tự động xóa dữ liệu tạm thời” mà không cần chi phí thêm ⇒ nghĩ đến TTL

🏁 Kết luận

TTL là một tính năng cực kỳ hữu ích để dọn dẹp dữ liệu tạm thời trong DynamoDB mà không tốn công viết code. Việc hiểu rõ TTL giúp bạn tối ưu ứng dụng và dễ dàng trả lời các câu hỏi liên quan trong kỳ thi DVA-C02.


13 Views

Leave a Reply

Your email address will not be published. Required fields are marked *