- DynamoDB là một NoSQL DB.
- Tương tự như các NoSQL DB khác, nó không hỗ trợ các truy vấn dạng join, sum hay aggregation.
- Tuy nhiên, nó hỗ trợ scale theo chiều ngang, giúp tăng hiệu suất khi dữ liệu lớn.
- Cấu trúc cơ bản gồm các bảng.
- Mỗi bảng có một primary key được khai báo khi khởi tạo, bao gồm partition key và sort key.
- Bên cạnh đó, mỗi bảng có thể chứa vô số bản ghi.
- Mỗi bản ghi có thể bao gồm nhiều attributes, và các attributes này có thể được thêm sau hoặc để trống (null).
- Tuy nhiên, size tối đa của mỗi bản ghi là 400KB.
- Về kiểu dữ liệu, DynamoDB hỗ trợ: String, Number, Binary, Boolean, List, Map, và các Set.
- Ngoài ra, DynamoDB hỗ trợ PartiQL, cho phép viết query NoSQL tương tự như SQL.
- Cuối cùng, DynamoDB cũng có thể được sử dụng để lưu trữ Session Data.
Read/Write Capacity Units
- WCU – ghi một item tối đa 1KB trong 1 giây

- RCU
- Eventually Consistent Read – đọc 2 items tối đa 4KB trong một giây
- Strongly Consistent Read – đọc 1 item tối đa 4KB trong một giây

Các dạng secondary indexes
Local Secondary Index | Global Secondary Index |
---|---|
Phải được khai báo lúc khởi tạo | Có thể khai báo sau khi tạo bảng |
Sử dụng WRC và RCU chung với bảng chính | Được cấp phát RCU và WCU ĐỘC LẬP |
Có thể có tối đa 5 LSI | Giúp tăng tốc query cho các field không phải là key |
Dù cho dùng WCU riêng, vẫn có thể làm bảng rơi vào trạng thái throttled nếu phần GSI bị throttled |
DynamoDB Accelerator – DAX

- Đây là một dạng cache dành cho DynamoDB, giúp tăng tốc độ truy xuất dữ liệu.
- Về hiệu năng, độ trễ chỉ ở mức microseconds, cực kỳ nhanh.
- Ngoài ra, người dùng có thể thiết lập TTL (Time To Live) cho dữ liệu trong cache, với giá trị mặc định là 5 phút.
- Về khả năng mở rộng, hệ thống có thể hỗ trợ tối đa 10 nodes trong một cluster.
- Hơn nữa, nó còn hỗ trợ multi-AZ (nhiều vùng sẵn sàng) và mã hóa dữ liệu (encryption) để đảm bảo độ tin cậy và bảo mật.

Dynamo DB Stream

- Retetion tối đa 24 tiếng
- Dùng cho:
- Phản hồi realtime
- Phân tích dữ liệu
TTL – Time To Live
- Tự động xoá các items sau một khoảng thời gian
- Không tốn WCUs
- TTL attribute cần là dạng số
- Expired items sẽ bị xoá trong vòng 48 tiếng
- Dùng cho các trường hợp tự invalidate data sau một khoảng time, ……

Transactions
- Tốn gấp 2 số lượng WCUs và RCUs so với các actions thông thường

Write Shardings
- Để tránh việc một partition key trở thành một hot key ⇒ sử dụng hậu tố thêm vào key

Một số lưu ý khác



- Khi muốn xoá một bảng
- Cách 1: Scan và xoá tất cả bản ghi ⇒ mất thời gian và tốn tiền
- Cách 2: Drop luôn table đó đi và tạo lại ⇒ cần lưu lại được cái scheme của bảng
- Khi muốn copy một bảng
- Cách 1: Backup bảng hiện tại và restore thành bảng mới
- Cách 2: Chạy code, scan và push data vào bảng mới
- KHÔNG hỗ trợ resource-based policies – quản lý access bằng IAM Policies
Khi bị throttling, các giải pháp có thể là
- Áp dụng cơ chế retry exponential backoff
- Sử dụng partition key một cách hợp lý (có thể dùng thêm hậu tố)
- Sử dụng DAX, nếu gặp vấn đề về RCU