Pilih Database
Which AWS Database? — purpose-built selector
🎯 Sebab Apa Wujud
Kad ni wujud sebab exam SAA-C03 suka uji 'pilih database betul ikut shape data + access pattern' — bukan satu DB untuk semua. AWS galak purpose-built: tiap engine optimize untuk satu corak data (relational, key-value, document, graph, wide-column, OLAP), jadi pilih salah = lambat/mahal. Kad ni map keyword soalan terus ke engine supaya kau tak teragak-agak.
Apa Dia
AWS galak "purpose-built database" — pilih ikut bentuk data dan cara access, bukan satu DB untuk semua. Relational (SQL, transaksi) → RDS/Aurora. Key-value laju → DynamoDB. Cache → ElastiCache. Document/Mongo → DocumentDB. Graph → Neptune. Wide-column → Keyspaces. Analytics/warehouse → Redshift. In-memory durable → MemoryDB.
Pilih database (decision tree)
Mula-mula tanya "relational ke tak". Relational + transaksi → RDS/Aurora. Lepas tu match keyword soalan: "MongoDB" → DocumentDB, "graph/relationship/fraud" → Neptune, "Cassandra/wide-column" → Keyspaces, "warehouse/analytics" → Redshift, "microsecond cache" → DAX/ElastiCache.
Analogi Shopee — OLTP vs OLAP
Analogi Shopee: setiap kali kau tekan Checkout = satu transaksi kecil pantas (tolak stok, simpan order dalam millisecond) = OLTP → RDS/Aurora/DynamoDB. Bila bos minta laporan "jumlah jualan semua kedai ikut negeri bulan ni" = baca & aggregate berjuta baris = OLAP → Redshift. Jangan keliru: checkout = OLTP, dashboard/laporan = OLAP.
Purpose-built database matrix
| Engine | Jenis | Guna bila / keyword exam |
|---|---|---|
| RDS | Relational (managed) | MySQL/Postgres/Oracle/SQL Server, transaksi standard |
| Aurora | Relational (cloud-native) | HA hebat, 6 copies, 5x MySQL, auto-scale storage, Global DB |
| DynamoDB | Key-value / document NoSQL | Serverless, single-digit ms, any scale, spiky traffic |
| ElastiCache | In-memory cache | Kurangkan load DB, Redis/Memcached, session store |
| DAX | In-memory cache (DynamoDB) | Microsecond reads KHUSUS DynamoDB |
| DocumentDB | Document (Mongo-compat) | "Migrate MongoDB", JSON documents, collections |
| Neptune | Graph | Social network, fraud detection, relationship query |
| Keyspaces | Wide-column (Cassandra) | "Migrate Cassandra", CQL, wide-column |
| Redshift | Data warehouse (OLAP) | Analytics berulang, BI, aggregate berjuta baris |
| Timestream | Time-series | IoT sensor data, metrics ikut masa |
Ingat: Exam fish for KEYWORD: "MongoDB"→DocumentDB, "Cassandra"→Keyspaces, "graph/relationship"→Neptune, "warehouse/analytics"→Redshift, "time-series/IoT metrics"→Timestream, "microsecond DynamoDB"→DAX, "transaksi + HA"→Aurora. Jangan jawab DynamoDB untuk soalan relational/transaksi.
Apa BAWAH RDS vs apa BUKAN RDS — + server-based vs serverless
| Service | Bawah RDS? | Jenis | Server / Serverless |
|---|---|---|---|
| MySQL | ✅ Ya (1 of 6 engine) | Relational SQL | Server-based (pilih instance) |
| PostgreSQL | ✅ Ya | Relational SQL | Server-based |
| MariaDB | ✅ Ya | Relational SQL | Server-based |
| Oracle | ✅ Ya | Relational SQL (komersial) | Server-based |
| SQL Server | ✅ Ya | Relational SQL (komersial) | Server-based |
| Aurora | ✅ Ya (cloud-native; MySQL/PG je) | Relational SQL | Server-based ATAU Serverless v2 |
| DynamoDB | ❌ BUKAN | Key-value NoSQL | 🟢 Serverless |
| ElastiCache | ❌ BUKAN | In-memory cache (Redis/Memcached) | Server-based (node) |
| Redshift | ❌ BUKAN | Data warehouse OLAP | Server-based (+Serverless) |
| DocumentDB | ❌ BUKAN | Document (Mongo-compat) | Server-based |
| Neptune | ❌ BUKAN | Graph | Server-based (+Serverless) |
| Keyspaces | ❌ BUKAN | Wide-column (Cassandra) | 🟢 Serverless |
| Timestream | ❌ BUKAN | Time-series | 🟢 Serverless |
Ingat: RDS = PAYUNG untuk 6 enjin RELATIONAL/SQL je: MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Aurora. Apa-apa NoSQL / cache / warehouse / graph / time-series = BUKAN RDS walaupun ia "database". Server-based = pilih saiz instance, bayar 24/7 walau idle (RDS biasa, Aurora biasa). Serverless = auto-scale + bayar guna je / boleh scale near-zero (DynamoDB, Keyspaces, Aurora Serverless v2). PENTING: "Aurora" sendiri ≠ serverless — mesti ada perkataan "Serverless" di belakang nama.
⚡ Quick Sifir — hafal ni
- ▪Relational + transaksi OLTP → RDS (standard) / Aurora (HA hebat, auto-scale).
- ▪Key-value, ms latency, serverless, spiky → DynamoDB. Microsecond atas DynamoDB → +DAX.
- ▪MongoDB → DocumentDB. Cassandra → Keyspaces. Graph/relationship/fraud → Neptune.
- ▪Analytics/warehouse/aggregate berjuta baris (OLAP) → Redshift. Time-series/IoT → Timestream.
- ▪Cache depan SEBARANG DB → ElastiCache (Redis/Memcached).
- ▪Trap: OLTP (checkout/transaksi) = RDS/Aurora; OLAP (laporan/dashboard) = Redshift.
- ▪RDS = 6 enjin RELATIONAL je (MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Aurora). NoSQL/cache/warehouse/graph/time-series = BUKAN RDS.
- ▪Server-based = bayar instance 24/7 walau idle (RDS biasa, Aurora biasa). Serverless = bayar guna je / scale near-zero (DynamoDB, Keyspaces, Aurora Serverless v2).
- ▪'Aurora' ≠ serverless melainkan ada perkataan 'Serverless' di belakang. Aurora biasa = server-based cluster.
🪤 Perangkap Soalan
Q: App perlu cari semua mutual friends & detect fraud ring dalam data berhubung-rapat (highly connected). Database?
⚠ Umpan: DynamoDB — sebab dia laju & scalable, ramai default pilih untuk apa-apa NoSQL.
✓ Betul: Neptune — keyword 'relationship / mutual friends / fraud ring / connected data' = graph = Neptune. DynamoDB key-value, teruk untuk traverse relationship.
Q: Aplikasi e-commerce transaksi (checkout, tolak stok, simpan order) perlukan consistency kuat & SQL. Database?
⚠ Umpan: Redshift — sebab dia handle data besar & SQL, nampak macam boleh.
✓ Betul: RDS/Aurora — keyword 'transaksi / checkout / OLTP' = relational OLTP = RDS/Aurora. Redshift = OLAP/analytics (aggregate), teruk untuk single-row insert/update.
Q: App relational MySQL dengan traffic ON-OFF teruk (dev-test waktu office je, malam sunyi). Nak bayar ikut guna & scale near-zero bila idle. Pilih?
⚠ Umpan: Amazon RDS MySQL (Multi-AZ) — sebab 'relational MySQL' terus pilih RDS biasa. SALAH: RDS biasa server-based, bayar instance 24/7 walau idle — bukan 'pay per use / scale to zero'.
✓ Betul: Aurora Serverless v2 — keyword 'unpredictable/intermittent/dev-test + scale near-zero + pay per use' = serverless. 'Aurora' je ≠ serverless; mesti ada 'Serverless' di belakang nama.
Q: Nak simpan shopping cart / user session berskala besar, schemaless, latency millisecond. Database?
⚠ Umpan: Amazon RDS — sebab 'database' biasa orang fikir SQL/RDS dulu. SALAH: cart/session = key-value schemaless, RDS (relational, fixed schema) leceh & susah scale.
✓ Betul: DynamoDB — keyword 'session / shopping cart / schemaless / any scale / single-digit ms' = key-value NoSQL = DynamoDB (BUKAN RDS — DynamoDB bukan bawah RDS langsung).
🧠 Cara Mudah Ingat
- →OLTP (transaksi, banyak read/write baris tunggal) → RDS/Aurora. OLAP (analytics, aggregate besar) → Redshift. Ni beza paling kerap ditanya.
- →SQL/relational + perlu HA terbaik + auto storage + global → Aurora. SQL standard / engine spesifik (Oracle, SQL Server) → RDS.
- →NoSQL key-value serverless ms latency → DynamoDB. Perlu microsecond reads atas DynamoDB → tambah DAX.
- →Keyword migrasi: "migrate MongoDB"→DocumentDB, "migrate Cassandra"→Keyspaces, "migrate Kafka"→MSK (streaming, bukan DB).
- →Cache: ElastiCache = cache depan SEBARANG DB (Redis/Memcached). DAX = cache KHUSUS DynamoDB sahaja.
- →Graph (mutual friends, fraud rings, recommendation) → Neptune. Bukan DynamoDB, bukan RDS.
- →PRICING discriminator (model bil): DynamoDB & Keyspaces = serverless pay-per-request (boleh turun $0 bila idle). RDS/Aurora/DocumentDB/Neptune = instance-based (bayar/jam walau idle; Aurora & Neptune ada pilihan Serverless). "Spiky / idle selalu / tak nak urus kapasiti" condong serverless; "beban stabil 24/7" condong instance provisioned.
Guna Bila
Pilih database betul ikut shape data + access pattern (THE exam decision)