Cơ sở dữ liệu
RDS, Aurora, DynamoDB, ElastiCache và các database chuyên dụng: chọn theo kiểu dữ liệu, tính sẵn sàng và hiệu năng.
- DomainThiết kế chịu lỗi
- DomainThiết kế hiệu năng cao
- DomainTối ưu chi phí
- 10 sơ đồ
- 10 tình huống
- 12 dịch vụ
5 phút phải nhớ
- RDS Multi-AZ: standby đồng bộ ở AZ khác, tự failover qua cùng tên DNS; standby (kiểu một instance) không phục vụ đọc.Đề hỏi "tăng độ sẵn sàng" → Multi-AZ; "giảm tải đọc" → read replica. Hai thứ khác nhau.
- Read replica sao chép bất đồng bộ, đọc được, cùng hoặc khác Region, nâng lên thành DB độc lập được (RDS MySQL tối đa 15 replica).Báo cáo nặng làm chậm DB chính → read replica; DR khác Region → cross-Region read replica rồi promote.
- Backup tự động của RDS giữ 0–35 ngày (0 là tắt) và phục hồi được về một thời điểm; snapshot thủ công giữ tới khi bạn xoá.Cần giữ quá 35 ngày → snapshot thủ công hoặc AWS Backup.
- Aurora: ổ dùng chung có bản sao ở 3 AZ, tự lớn (tới 256 TiB tuỳ phiên bản), tối đa 15 Aurora Replica, độ trễ sao chép thường dưới 100 ms.Failover Aurora nhanh vì replica đọc cùng ổ; dùng writer endpoint để ghi, reader endpoint để chia đọc.
- Aurora Global Database: 1 Region ghi + tối đa 10 Region phụ chỉ đọc, sao chép thường dưới 1 giây.DR khác Region với RPO / RTO thấp, hoặc đọc độ trễ thấp cho người dùng toàn cầu.
- Aurora Serverless v2 co giãn theo nhu cầu; RDS Proxy gom kết nối cho Lambda / ứng dụng mở nhiều kết nối.Lambda làm cạn connection của RDS → RDS Proxy (còn giúp failover nhanh hơn, dùng IAM / Secrets Manager).
- DynamoDB: NoSQL key-value, độ trễ mili giây ở mọi quy mô; item tối đa 400 KB; on-demand (trả theo request) hoặc provisioned (RCU / WCU, có auto scaling).Lưu lượng khó đoán → on-demand; ổn định, muốn rẻ → provisioned + auto scaling.
- 1 RCU = 1 lần đọc nhất quán mạnh (hoặc 2 lần đọc eventually consistent) mỗi giây cho item ≤ 4 KB; 1 WCU = 1 lần ghi mỗi giây cho item ≤ 1 KB; transaction tốn gấp đôi.Đề tính dung lượng: làm tròn kích thước item lên bội 4 KB (đọc) hoặc 1 KB (ghi).
- Khoá DynamoDB: partition key (+ sort key). GSI: khoá khác hẳn, tạo bất cứ lúc nào, chỉ eventually consistent. LSI: cùng partition key, sort key khác, phải tạo khi tạo bảng, tối đa 5.Cần truy vấn theo thuộc tính khác → GSI; tránh Scan.
- DynamoDB Streams + Lambda cho xử lý theo thay đổi; Global Tables cho multi-Region active-active; PITR phục hồi tới từng giây trong 35 ngày; TTL tự xoá item hết hạn.Gửi email khi có đơn mới → Streams + Lambda; người dùng nhiều châu lục cùng ghi → Global Tables.
- Cache: DAX cho DynamoDB (micro giây, gần như không sửa code); ElastiCache cho mọi nguồn (Valkey / Redis OSS: replication, backup, cấu trúc dữ liệu phong phú; Memcached: đơn giản, đa luồng, không replication).Đọc lặp lại nhiều từ RDS → ElastiCache (cache-aside); bảng xếp hạng → sorted set của Valkey / Redis.
- Database chuyên dụng: DocumentDB (MongoDB), Neptune (đồ thị), Keyspaces (Cassandra), Timestream (chuỗi thời gian), Redshift (kho dữ liệu, OLAP), MemoryDB (Redis bền vững làm DB chính).Đề thường nêu mô hình dữ liệu → chọn theo mô hình: quan hệ bạn bè → Neptune; IoT theo thời gian → Timestream.
- Mã hoá RDS phải bật lúc tạo; DB chưa mã hoá thì snapshot → copy snapshot có mã hoá → khôi phục.Read replica có cùng trạng thái mã hoá với nguồn.
Sơ đồ
RDS Multi-AZ và read replica
Từng bước
- Mỗi lần ghi được chép đồng bộ sang standby ở AZ khác.
- Read replica nhận bất đồng bộ, công cụ báo cáo đọc từ đây để không làm chậm primary.
- Primary hoặc AZ a hỏng: RDS chuyển tên DNS sang standby, ứng dụng kết nối lại vào cùng endpoint.
Aurora: writer, reader và ổ dùng chung
Từng bước
- Ghi đi qua writer endpoint, dữ liệu nằm ở ổ cluster chung.
- Đọc qua reader endpoint, chia cho các Aurora Replica (trễ thường dưới 100 ms).
Aurora Global Database
Từng bước
- Ghi ở Region chính, sao chép ở tầng lưu trữ sang Region phụ, thường dưới 1 giây.
- Người dùng châu Âu đọc ở Region gần; Region chính hỏng thì failover sang cụm phụ.
RDS Proxy gom kết nối cho Lambda
Từng bước
- Mỗi môi trường Lambda mở kết nối tới Proxy thay vì tới database.
- Proxy dùng lại pool kết nối nhỏ, lấy thông tin đăng nhập từ Secrets Manager; failover nhanh hơn.
Cache-aside với ElastiCache
DAX trước DynamoDB
Từng bước
- Đọc lặp lại trả từ bộ nhớ của DAX (micro giây).
- Trượt cache hoặc ghi: DAX gọi DynamoDB rồi cập nhật cache.
Khoá DynamoDB, GSI và LSI
Từng bước
- LSI: cùng khách, sắp theo thuộc tính khác; đọc nhất quán mạnh được.
- GSI: truy vấn theo thuộc tính khác hẳn mà không phải Scan; chỉ eventually consistent.
DynamoDB Streams kích hoạt xử lý
Từng bước
- Ứng dụng chỉ ghi bảng; DynamoDB đưa thay đổi vào stream.
- Lambda đọc stream theo lô, gửi email và cập nhật chỉ mục tìm kiếm.
DynamoDB Global Tables: ghi ở nhiều Region
Từng bước
- Mỗi nơi đọc ghi vào bản sao ở Region gần (active-active).
- Thay đổi được sao chép sang các bản sao còn lại.
Chọn database theo mô hình dữ liệu
So sánh nhanh
Multi-AZ và read replica
| Multi-AZ (DB instance) | Read replica | |
|---|---|---|
| Mục đích | Sẵn sàng cao, failover | Chia tải đọc, DR |
| Sao chép | Đồng bộ | Bất đồng bộ |
| Đọc được | Không (standby) | Có |
| Phạm vi | Khác AZ, cùng Region | Cùng AZ, khác AZ hoặc khác Region |
| Khi primary hỏng | Tự chuyển, giữ nguyên endpoint | Phải promote, endpoint mới |
RDS và Aurora
| RDS | Aurora | |
|---|---|---|
| Engine | MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2 | Tương thích MySQL, PostgreSQL |
| Lưu trữ | EBS gắn vào instance, cấp dung lượng trước (có autoscaling) | Ổ cluster dùng chung, bản sao ở 3 AZ, tự lớn |
| Replica đọc | Tối đa 15 (MySQL), bất đồng bộ | Tối đa 15, thường dưới 100 ms, là đích failover |
| Nhiều Region | Cross-Region read replica | Global Database (tối đa 10 Region phụ, dưới 1 giây) |
DynamoDB: GSI và LSI
| GSI | LSI | |
|---|---|---|
| Partition key | Khác bảng gốc | Giống bảng gốc |
| Tạo | Bất cứ lúc nào | Chỉ khi tạo bảng |
| Giới hạn | 20 mỗi bảng (mặc định, xin tăng được) | 5 mỗi bảng |
| Đọc nhất quán mạnh | Không | Có |
| Dung lượng | RCU / WCU riêng | Dùng chung bảng; item collection tối đa 10 GB |
Chọn cache
| DAX | ElastiCache (Valkey / Redis OSS) | ElastiCache (Memcached) | |
|---|---|---|---|
| Dùng với | Chỉ DynamoDB | Mọi nguồn | Mọi nguồn |
| Sửa code | Gần như không (SDK tương thích API DynamoDB) | Có (cache-aside, write-through) | Có |
| Replication / failover | Có (1 primary + tối đa 10 replica) | Có | Không |
| Backup, cấu trúc dữ liệu | — | Có backup; sorted set, list, pub/sub… | Không backup (node-based); chỉ key-value đơn giản, đa luồng |
Database theo mô hình dữ liệu
| Nhu cầu | Dịch vụ |
|---|---|
| Quan hệ, giao dịch (OLTP) | RDS, Aurora |
| Key-value / document quy mô lớn, độ trễ ổn định | DynamoDB |
| Tương thích MongoDB | DocumentDB |
| Đồ thị (mạng xã hội, gợi ý, chống gian lận) | Neptune |
| Tương thích Cassandra | Keyspaces |
| Chuỗi thời gian (IoT, metric) | Timestream |
| Kho dữ liệu, phân tích (OLAP) | Redshift |
| Cache trong bộ nhớ | ElastiCache |
| Redis bền vững làm database chính | MemoryDB |
Tình huống đề hay gặp
1Database RDS MySQL phải tự chuyển sang máy khác khi AZ gặp sự cố, ứng dụng không phải đổi chuỗi kết nối.
Xem đáp án
Đúng: Bật Multi-AZ
Standby đồng bộ; khi lỗi, RDS tự trỏ cùng tên DNS sang standby.
Sai: Tạo read replica ở AZ khác
Replica bất đồng bộ, phải promote thủ công và endpoint đổi.
2Truy vấn báo cáo cuối tháng làm chậm database đơn hàng (RDS PostgreSQL).
Xem đáp án
Đúng: Tạo read replica, cho công cụ báo cáo đọc từ replica
Tách tải đọc nặng khỏi primary.
Sai: Bật Multi-AZ
Standby không phục vụ đọc.
Sai: Tăng cỡ instance
Tốn tiền cả tháng cho tải vài ngày.
3Ứng dụng toàn cầu trên Aurora cần DR khác Region với RPO khoảng 1 giây và đọc độ trễ thấp ở châu Âu.
Xem đáp án
Đúng: Aurora Global Database với cụm phụ ở châu Âu
Sao chép thường dưới 1 giây; cụm phụ phục vụ đọc tại chỗ và có thể được nâng lên khi Region chính hỏng.
Sai: Snapshot hằng ngày copy sang Region khác
RPO tới 24 giờ.
4Hàng nghìn hàm Lambda đồng thời làm RDS báo lỗi "too many connections".
Xem đáp án
Đúng: Đặt RDS Proxy giữa Lambda và RDS
Proxy giữ pool kết nối dùng chung, hỗ trợ IAM / Secrets Manager và failover nhanh hơn.
Sai: Tăng max_connections và cỡ instance
Chỉ đẩy giới hạn lên, không giải quyết việc mở / đóng kết nối liên tục.
5Trang sản phẩm đọc cùng dữ liệu từ RDS hàng nghìn lần mỗi giây; muốn giảm tải DB và độ trễ.
Xem đáp án
Đúng: ElastiCache (Valkey / Redis OSS) với cache-aside và TTL
Đọc từ bộ nhớ mức micro giây, DB chỉ nhận lần đọc trượt cache.
Sai: DAX
DAX chỉ dùng cho DynamoDB.
6Bảng DynamoDB bị đọc lặp lại cùng item rất nhiều, cần độ trễ micro giây mà không viết lại logic cache.
Xem đáp án
Đúng: DynamoDB Accelerator (DAX)
Cache ghi xuyên tương thích API DynamoDB, đổi client là dùng được.
Sai: ElastiCache
Phải tự viết logic cache và đồng bộ dữ liệu.
7Ứng dụng mới, lưu lượng không đoán được (lúc 0, lúc tăng vọt), muốn không phải lập kế hoạch dung lượng.
Xem đáp án
Đúng: DynamoDB on-demand
Trả theo request, tự đáp ứng tải.
Sai: DynamoDB provisioned không auto scaling
Bị throttle khi tăng vọt, lãng phí lúc vắng.
8Bảng DynamoDB khoá theo customerId; giờ cần tìm đơn theo trạng thái (status) mà không Scan.
Xem đáp án
Đúng: Tạo GSI với partition key status
GSI có khoá khác, thêm được sau khi bảng đã có.
Sai: Tạo LSI trên status
LSI phải tạo khi tạo bảng và vẫn cùng partition key customerId.
Sai: Scan với filter
Đọc cả bảng, tốn RCU.
9Mỗi khi có đơn hàng mới trong DynamoDB cần gửi email xác nhận, không thay đổi code ghi đơn.
Xem đáp án
Đúng: Bật DynamoDB Streams và cho Lambda xử lý stream
Mỗi thay đổi item thành một bản ghi stream, Lambda tự kéo theo lô.
Sai: Lambda chạy theo lịch quét bảng
Trễ và tốn RCU cho Scan.
10Ứng dụng mạng xã hội cần truy vấn "bạn của bạn có cùng sở thích" nhanh.
Xem đáp án
Đúng: Amazon Neptune
Database đồ thị, duyệt quan hệ nhiều bước hiệu quả.
Sai: RDS với nhiều JOIN
JOIN nhiều tầng chậm dần khi dữ liệu lớn.
Chọn nhanh
Chọn database và cách mở rộng thế nào?
| Khi cần | Dùng |
|---|---|
| Quan hệ, cần sẵn sàng cao trong một Region | RDS Multi-AZ hoặc Aurora · xem sơ đồ |
| Giảm tải đọc cho RDS / Aurora | Read replica / Aurora Replica + reader endpoint · xem sơ đồ |
| DR khác Region, RPO khoảng 1 giây | Aurora Global Database · xem sơ đồ |
| Lambda mở quá nhiều kết nối | RDS Proxy · xem sơ đồ |
| Cache cho dữ liệu đọc nhiều từ RDS | ElastiCache (cache-aside) · xem sơ đồ |
| Cache micro giây cho DynamoDB | DAX · xem sơ đồ |
| Key-value quy mô lớn, độ trễ ổn định | DynamoDB (chọn khoá tốt, GSI cho truy vấn khác) · xem sơ đồ |
| Xử lý khi dữ liệu DynamoDB thay đổi | DynamoDB Streams + Lambda · xem sơ đồ |
| Ghi ở nhiều Region cùng lúc | DynamoDB Global Tables · xem sơ đồ |
| Đồ thị, document, chuỗi thời gian, kho dữ liệu | Neptune, DocumentDB, Timestream, Redshift · xem sơ đồ |
| Chuyển database on-prem lên AWS ít downtime | DMS (+ Schema Conversion khi đổi engine) |
Bẫy hay gặp
- Dùng Multi-AZ standby để chia tải đọc (Multi-AZ một instance không đọc được).
- Dùng read replica làm giải pháp HA tự động trong cùng Region: replica phải promote, endpoint đổi.
- Nghĩ backup tự động RDS giữ được quá 35 ngày.
- Dùng DAX cho RDS hoặc ElastiCache cho DynamoDB khi đề nhấn "không sửa code".
- Chọn Memcached khi cần replication, backup hay sorted set.
- Tạo LSI sau khi bảng đã tồn tại (không được) hoặc đòi đọc nhất quán mạnh trên GSI.
- Chọn partition key ít giá trị (ví dụ status) cho bảng lớn: hot partition, bị throttle.
- Dùng Scan cho truy vấn thường xuyên thay vì Query + GSI.
- Lưu item lớn hơn 400 KB trong DynamoDB: đưa file lên S3, lưu đường dẫn.
- Tưởng có thể bật mã hoá cho RDS đang chạy chưa mã hoá: phải qua snapshot.
- Dùng Redshift cho OLTP hoặc RDS cho phân tích hàng tỷ dòng.
- Dùng RDS cho tải cần ghi từ nhiều Region cùng lúc: đó là DynamoDB Global Tables.
Dịch vụ trong module
RDSdatabase SQL được quản lý
AuroraSQL hiệu năng cao của AWS
DynamoDBNoSQL key-value cực nhanh
DAXcache trong bộ nhớ cho DynamoDB
ElastiCachebộ nhớ đệm (Redis)
MemoryDBdatabase in-memory bền vững
DocumentDBdatabase document tương thích MongoDB
Neptunedatabase đồ thị
Keyspacesdatabase tương thích Cassandra
Timestreamdatabase chuỗi thời gian
Redshiftkho dữ liệu phân tích
DMSdi chuyển và sao chép database
Số liệu dễ thay đổi (đã kiểm với tài liệu AWS)
- RDS sao chép tới read replica bất đồng bộ; read replica có thể ở Region khác và được promote thành DB độc lập; RDS không tự co giãn số read replica. kiểm ngày 2026-10-16 ↗
- RDS for MySQL: tối đa 15 read replica cho mỗi DB instance nguồn trong cùng Region. kiểm ngày 2026-10-16 ↗
- Backup tự động RDS giữ 0–35 ngày (0 là tắt); mặc định 7 ngày khi tạo bằng console, 1 ngày khi tạo bằng API / CLI. kiểm ngày 2026-10-16 ↗
- Ổ cluster Aurora có bản sao ở 3 AZ, tự lớn tới 256 TiB tuỳ phiên bản engine. kiểm ngày 2026-10-16 ↗
- Aurora tối đa 15 Aurora Replica; độ trễ sao chép thường dưới 100 ms; replica là đích failover. kiểm ngày 2026-10-16 ↗
- Aurora Global Database: 1 Region chính và tối đa 10 Region phụ; sao chép thường dưới 1 giây. kiểm ngày 2026-10-16 ↗
- DynamoDB: item tối đa 400 KB; 1 RCU = 1 đọc mạnh hoặc 2 đọc eventually consistent mỗi giây cho item ≤ 4 KB; 1 WCU = 1 ghi mỗi giây cho item ≤ 1 KB; transaction gấp đôi. kiểm ngày 2026-10-16 ↗
- DynamoDB: tối đa 5 LSI và mặc định 20 GSI mỗi bảng. kiểm ngày 2026-10-16 ↗
- DynamoDB PITR phục hồi tới từng giây trong tối đa 35 ngày (đặt được 1–35 ngày). kiểm ngày 2026-10-16 ↗
- DAX: 1 node primary và 0–10 read replica mỗi cluster. kiểm ngày 2026-10-16 ↗
- ElastiCache Memcached đa luồng, không replication / failover; Valkey và Redis OSS có replication, failover, pub/sub, sorted set, backup. kiểm ngày 2026-10-16 ↗