# 🗄️ S3 và DynamoDB: mô hình dữ liệu và pattern truy cập

> Sign in to view the full content of this lesson.

## Mục tiêu bài học

Sau bài này, bạn cần làm được:

- Chọn đúng **storage class** và cấu hình versioning, lifecycle cho một tình huống S3 cụ thể.
- Phân biệt và tính đúng **partition key, sort key**, biết khi nào dùng **GSI** hay **LSI**.
- Tính được **RCU/WCU** từ số item và kích thước item trong đề bài.
- Nhận diện các câu hỏi về **consistency**, **presigned URL**, **hot partition** và **Scan vs Query**.
- Nhận ra các từ khoá trong đề thi dẫn thẳng tới đáp án đúng.

## Ôn nhanh

Bài trước bạn đã chốt: Lambda khi xử lý sự kiện ngắn và không muốn quản lý hạ tầng; ECS khi đã có container; Elastic Beanstalk khi có ứng dụng truyền thống. Điểm nối với bài này là **nơi dữ liệu nằm**: Lambda chạy xong là mất, nên state phải đặt ở S3 (file/object) hoặc DynamoDB (bản ghi có khoá). Đề thi rất hay hỏi cặp "compute này ghi vào đâu".

## Lý thuyết

### S3: mô hình object

S3 là **object storage**, không phải filesystem. Mỗi object gồm **key** (chuỗi đầy đủ), **value** và **metadata**. Không có khái niệm thư mục thật, chỉ là **prefix** trong key.

Các con số phải nhớ:

- Object tối đa **5 TB**, multipart upload **bắt buộc khi > 5 GB**, khuyến nghị dùng từ **100 MB**.
- Durability **11 số 9** (99.999999999%), availability của Standard là 99.99%.
- Bucket name là **globally unique**, gắn với một Region.
- ==Từ tháng 12/2020, S3 cho strong read-after-write consistency cho mọi thao tác, kể cả overwrite PUT và DELETE==.

### S3: storage class
