📌 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:
- Vào bảng DynamoDB
- Chọn tab “TTL”
- Chỉ định tên thuộc tính (ví dụ:
ttl
) - 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ống | Mô tả |
---|---|
Phiên người dùng | Tự độ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ời | Giữ dữ liệu 5–10 phút |
Lưu trữ log tạm thời | Xóa sau 24 giờ |
Giỏ hàng chưa thanh toán | Xóa sau 1 giờ |
🛡️ Các lưu ý quan trọng khi ôn thi DVA-C02
Hạng mục | Ghi nhớ |
---|---|
TTL field | Bắt buộc là Number (UNIX epoch timestamp) |
Chỉ định một field | Chỉ 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 throughput | Quá trình xóa không tính WCU/RCU |
TTL không trigger Streams | Như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í | TTL | Lambda |
---|---|---|
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.