Question 25
Domain 3: Design High-Performing ArchitecturesSebuah aplikasi e-commerce memiliki **product catalog** yang disimpan di DynamoDB. Ada dua query pattern utama: 1. `GET /products/{product_id}` — fetch satu produk by primary key (cepat) 2. `GET /products?category=electronics&sort=price_asc` — filter by category, sort by price (lambat, full scan) Struktur tabel: `product_id` (partition key). Bagaimana cara mengoptimalkan query pattern kedua?
Correct answer: C
Explanation
DynamoDB “query” bekerja efisien jika memakai key, bukan full scan. Dengan membuat GSI berpartition key `category` dan sort key `price`, request `GET /products?category=electronics&sort=price_asc` bisa memakai `KeyConditionExpression` untuk mengambil item dalam kategori itu dan mengurutkan berdasarkan harga tanpa “full scan”.
Why each option is right or wrong
A. Aktifkan DynamoDB DAX untuk cache query hasil scan
B. Pindahkan ke Aurora MySQL untuk support ORDER BY dan WHERE clause
C. **Buat GSI dengan `category` sebagai partition key dan `price` sebagai sort key** — query pattern kedua bisa dieksekusi langsung via GSI tanpa full scan; DynamoDB query GSI dengan `KeyConditionExpression` bisa filter by category dan sort by price secara efisien
DynamoDB hanya dapat melakukan operasi `Query` secara efisien jika kondisi pencarian memakai key pada tabel atau index; jika hanya ada `product_id` sebagai partition key, maka `category=electronics` memaksa `Scan` yang membaca seluruh item. Sesuai dokumentasi `Query` dan `Global Secondary Index (GSI)`, membuat GSI dengan `category` sebagai partition key dan `price` sebagai sort key memungkinkan `KeyConditionExpression` seperti `category = :c` dan `ScanIndexForward=true/false` untuk mengurutkan harga naik/turun tanpa full table scan.
D. Gunakan DynamoDB Parallel Scan untuk mempercepat full table scan