1. Pendahuluan DynamoDB
Amazon DynamoDB adalah database NoSQL Key-Value dan Document, bersifat serverless, highly scalable, dan berlatensi sangat rendah (1–5 ms).

Developer memilih DynamoDB karena:
- Tidak perlu mengelola server database
- Skalabilitas otomatis
- Performa konsisten
- Cocok untuk aplikasi real-time
- Integrasi dalam arsitektur serverless
- Mendukung data JSON yang fleksibel
DynamoDB adalah salah satu pilar utama di AWS dalam kategori database modern.
Aplikasi besar yang memakai DynamoDB:
- Amazon.com (cart, session, catalog)
- Netflix
- Airbnb
- Lyft
- Samsung
- Disney+
- Fortnite (Epic Games)
Jika Anda membangun aplikasi besar atau sistem mission-critical, DynamoDB adalah pilihan yang terbukti.
2. Konsep Fundamental DynamoDB
Sebelum menulis kode, Anda perlu memahami konsep dasar:
2.1 Table
DynamoDB menyimpan data dalam table. Mirip SQL, tetapi tanpa schema kolom kaku.
2.2 Item
Analoginya: row dalam SQL.
2.3 Attribute
Analoginya: kolom pada SQL, tetapi fleksibel (dokumen JSON pun bisa).
2.4 Primary Key
Ini adalah inti desain DynamoDB:
- Partition Key (PK) saja atau
- Partition Key + Sort Key (PK + SK)
Pemilihan PK & SK menentukan skalabilitas, performa, dan struktur data.
2.5 RCU & WCU (Read/Write Capacity Unit)
Digunakan ketika memakai mode provisioned.
Jika mode on-demand, tidak perlu hitung manual.
3. Arsitektur Internal DynamoDB (How It Works)
Ini bagian penting untuk memahami mengapa DynamoDB sangat cepat.
3.1 Partitioning
DynamoDB memecah tabel ke dalam banyak physical partitions untuk menjaga performa.
Karakteristik:
- Setiap partition punya throughput maksimal
- Data disebar berdasarkan hash dari Partition Key
- Partition bertambah otomatis seiring pertumbuhan tabel
Ini sebabnya PK sangat menentukan:
PK yang buruk → hotspot → throttling
PK yang baik → balanced partition → performa mantap
3.2 Storage Model
DynamoDB menyimpan data di SSD dengan replikasi multi-AZ secara otomatis.
3.3 Consistency Model
Dua mode:
- Eventually consistent (default, murah & cepat)
- Strongly consistent (lebih konsisten tapi mahal & lebih lambat)
3.4 Request Router
Front-end router akan:
- Hash PK
- Tentukan target partition
- Ambil/menyimpan item dengan latency rendah
Dengan arsitektur seperti ini, DynamoDB mampu memproses jutaan request per detik.
4. Kapasitas: Provisioned, On-Demand, Auto Scaling
4.1 On-Demand Mode
- Tidak perlu mengatur kapasitas
- Bayar per request
- Cocok untuk aplikasi tidak stabil / traffic naik turun
- Ideal untuk developer pemula
4.2 Provisioned Mode
- Anda mengatur RCU/WCU
- Lebih murah jika traffic stabil dan besar
- Dapat dipasangkan dengan Auto Scaling
4.3 Auto Scaling
Menyesuaikan kapasitas berdasarkan CloudWatch metrics.
4.4 Perhitungan Sederhana
1 WCU ~ 1 KB write per detik
1 RCU ~ 4 KB strongly consistent read per detik
5. Desain Partition Key & Sort Key
Ini topik yang paling penting bagi developer.
5.1 Partition Key
Karakteristik PK yang baik:
- Memiliki kardinalitas tinggi
- Terdistribusi merata
- Menghindari hotspot
Contoh PK buruk:
country
status
type
Karena sedikit variasi → semua request dilempar ke partition sama.
Contoh PK baik:
user_id
order_id
session_id
blog_post_id
5.2 Sort Key
Sort Key digunakan untuk menyusun data dalam 1 partition.
Contoh desain:
| PK | SK | Description |
|---|---|---|
| user#123 | order#001 | Order pertama |
| user#123 | order#002 | Order kedua |
| user#123 | profile | Profile user |
Anda dapat melakukan:
- Range query (
between) - Ordering
- Limit
- Prefix matching
6. Secondary Index (GSI & LSI)
6.1 Global Secondary Index (GSI)
GSI memiliki PK dan SK baru.
Cocok untuk query pola berbeda.
Contoh:
Tabel utama:
PK = user_id
SK = order_id
GSI:
GSI_PK = order_status
GSI_SK = created_at
6.2 Local Secondary Index (LSI)
- PK sama dengan tabel utama
- SK berbeda
- Harus dideklarasikan saat membuat tabel
LSI jarang digunakan dibanding GSI.
7. Item, Attributes, Projection, Capacity Cost
7.1 Item Size
Ukuran item mempengaruhi:
- biaya RCU/WCU
- biaya storage
Maksimal 400 KB.
7.2 Projection (GSI)
Tiga jenis:
- KEYS_ONLY
- INCLUDE
- ALL
7.3 Biaya Query
Query membeli kapasitas berdasarkan jumlah data yang dibaca, bukan jumlah item hasil.
8. Strategi Denormalisasi Data
DynamoDB menganut denormalisasi, bukan relational normalization.
Prinsip:
- Simpan data sesuai akses pattern, bukan relasi
- Duplicate data untuk mempercepat query
- Optimalkan “read”, bukan “write”
Contoh:
User profile ditulis di beberapa item berbeda agar query lebih cepat.
9. Single Table Design (STD)
Konsep penting DynamoDB modern.
9.1 Apa itu Single Table Design?
Semua entitas diletakkan dalam satu tabel.
Contoh:
| PK | SK | Item Type |
|---|---|---|
| USER#123 | PROFILE | user profile |
| USER#123 | ORDER#1 | order 1 |
| USER#123 | ORDER#2 | order 2 |
| ORDER#1 | META | metadata |
Manfaat STD
- Query lebih cepat
- Hemat biaya
- Lebih sedikit GSI
- Mudah di-scale
Kapan Tidak Perlu STD
- Data sederhana
- Traffic kecil
- Developer belum berpengalaman
10. Data Modeling untuk Use Case Nyata
Saya berikan 5 contoh lengkap:
10.1 E-commerce
PK = user_id
SK = order_id
GSI: search by product, status, date.
10.2 Social Media
PK = user_id
SK = post_timestamp
10.3 Blog / CMS
PK = post_id
SK = comment_id
10.4 IoT
PK = device_id
SK = timestamp
10.5 Mobile App Session
PK = session_id
SK = attributes
11. Operasi CRUD — Multi Bahasa
11.1 Node.js
Put Item
import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient({ region: "ap-southeast-1" });
await client.send(new PutItemCommand({
TableName: "users",
Item: {
user_id: { S: "123" },
name: { S: "Hendro" }
}
}));
Get Item
const result = await client.send(new GetItemCommand({
TableName: "users",
Key: { user_id: { S: "123" } }
}));
Query
await client.send(new QueryCommand({
TableName: "users",
KeyConditionExpression: "user_id = :u",
ExpressionAttributeValues: { ":u": { S: "123" } }
}));
11.2 Python boto3
import boto3
db = boto3.client('dynamodb')
db.put_item(
TableName='users',
Item={
'user_id': {'S': '123'},
'name': {'S': 'Hendro'}
}
)
11.3 PHP
$client->putItem([
'TableName' => 'users',
'Item' => [
'user_id' => ['S' => '123'],
'name' => ['S' => 'Hendro']
]
]);
11.4 GoLang
item := map[string]types.AttributeValue{
"user_id": &types.AttributeValueMemberS{Value: "123"},
"name": &types.AttributeValueMemberS{Value: "Hendro"},
}
svc.PutItem(context.TODO(), &dynamodb.PutItemInput{
TableName: aws.String("users"),
Item: item,
})
12. DynamoDB Streams
Digunakan untuk:
- Real-time analytics
- Replication
- Trigger Lambda
- Materialized views
Events:
- INSERT
- MODIFY
- REMOVE
13. Integrasi dengan AWS Lainnya
13.1 DynamoDB + Lambda + API Gateway
Pola arsitektur serverless terbaik.
13.2 DynamoDB + AppSync
GraphQL serverless modern.
13.3 DynamoDB + ECS
Untuk microservices.
13.4 DynamoDB + Step Functions
Untuk workflow.
14. Transaction & Concurrency Control
DynamoDB mendukung transaksi ACID:
- TransactWriteItems
- TransactGetItems
Optimistic locking menggunakan ConditionExpression.
15. Error Handling
Gunakan:
- Retry with exponential backoff
- Circuit breaker pattern
- Handle throttling gracefully
16. Security
16.1 IAM
Restrict resource ke level tabel atau item.
16.2 KMS Encryption
Default aktif.
16.3 VPC Endpoint
Agar akses tidak keluar internet.
17. Backup & Restore
Point in Time Recovery (PITR)
Backup otomatis setiap beberapa detik.
Export to S3
Untuk analitik.
18. Query Optimization
- Gunakan PK yang high-cardinality
- Hindari scan
- Gunakan GSI dengan projection tepat
- Hindari item besar > 400 KB
19. Best Practices Production (2025)
- Gunakan On-Demand untuk aplikasi baru
- Simpan item kecil
- Gunakan “attribute name short”
- Gunakan DynamoDB Streams untuk event-driven
- Gunakan DAX untuk caching heavy read
20. Anti-Pattern DynamoDB
- Meniru struktur relational database
- Terlalu banyak GSI
- PK dengan sedikit variasi
- Menggunakan scan untuk semua query
- Menggunakan DynamoDB untuk laporan kompleks
21. Biaya DynamoDB
Biaya utama:
- Read / Write Request
- Storage
- GSI
- Streams
- Backup
Cara hemat:
- On-Demand untuk aplikasi kecil
- TTL untuk data sementara
- Hindari item besar
- Kurangi scan
22. Monitoring
Gunakan:
- CloudWatch
- AWS X-Ray
- DynamoDB Contributor Insights
- DAX Metrics
23. Case Study Aplikasi Modern
23.1 E-commerce
DynamoDB digunakan untuk:
- sesi user
- cart
- order
- inventory cached
23.2 Game Backend (Real-Time)
Digunakan untuk leaderboard, matchmaking.
23.3 IoT
Untuk device telemetry jutaan data.
23.4 Blog / CMS
Untuk komentar & analytics real-time.
24. Penutup
DynamoDB adalah database modern yang:
- cepat
- scalable
- fleksibel
- serverless
- cocok untuk aplikasi masa depan
Dengan panduan ini, developer dapat membangun aplikasi apa pun — dari blog, e-commerce, mobile backend, microservices, hingga IoT — menggunakan DynamoDB sebagai fondasi.
