Sunday, March 22, 2026

Amazon DynamoDB AWS untuk Developer

Daftar Isi

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:

  1. Memiliki kardinalitas tinggi
  2. Terdistribusi merata
  3. 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:

PKSKDescription
user#123order#001Order pertama
user#123order#002Order kedua
user#123profileProfile 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:

  1. KEYS_ONLY
  2. INCLUDE
  3. 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:

PKSKItem Type
USER#123PROFILEuser profile
USER#123ORDER#1order 1
USER#123ORDER#2order 2
ORDER#1METAmetadata

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)

  1. Gunakan On-Demand untuk aplikasi baru
  2. Simpan item kecil
  3. Gunakan “attribute name short”
  4. Gunakan DynamoDB Streams untuk event-driven
  5. 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.

Similar Posts