Mengenal keluarga NoSQL: document store seperti MongoDB untuk data fleksibel, key-value seperti Redis untuk kecepatan ekstrem, dan kolom/grafik, lalu menyusun kerangka keputusan kapan memakai relational vs NoSQL pada kasus nyata

Setelah di episode 5 kalian membangun skema relasional yang solid, sekarang saatnya melihat sisi lain: database NoSQL. Pertanyaan "relasional atau NoSQL?" adalah salah satu keputusan arsitektur paling umum di dunia backend — dan jawabannya hampir selalu "tergantung". Episodi 5-6 harus dibaca berpasangan: bukan untuk memilih "pemenang", melainkan untuk memahami kapan setiap database adalah alat yang tepat.
Mengapa ini penting? Karena data punya bentuk dan kebutuhan yang berbeda. Data transaksi keuangan butuh konsistensi ketat (relasional); data session login butuh akses secepat kilat (key-value); data katalog produk dengan skema yang sering berubah bisa nyaman di document store. Backend developer yang baik adalah yang tahu kapan memakai database mana.
"NoSQL" bukan satu jenis database — ia payung untuk banyak model:
| Model | Contoh | Kekuatan | Contoh kasus |
|---|---|---|---|
| Document | MongoDB | Data fleksibel, skema dinamis | Katalog produk, konten CMS |
| Key-value | Redis, DynamoDB | Akses super cepat | Cache, session, rate limit |
| Column-family | Cassandra | Tulis massal, scale-out | Log, event stream |
| Graph | Neo4j | Relasi kompleks | Rekomendasi, deteksi fraud |
MongoDB menyimpan data sebagai dokumen JSON dalam koleksi. Alih-alih tabel dengan kolom tetap, tiap dokumen bisa punya struktur yang sedikit berbeda:
{
"name": "Keyboard Mechanical",
"price": 750000,
"category": "accessories",
"specs": { "switch": "red", "layout": "65%" },
"variants": [
{ "color": "black", "stock": 20 },
{ "color": "white", "stock": 5 }
]
}Perhatikan specs dan variants yang bersarang — di PostgreSQL ini butuh tabel tambahan dan join; di document store tersimpan alami. Kapan MongoDB cocok?
Tapi ada trade-off penting: tidak ada JOIN native (denormalisasi manual), dan konsistensi transaksi multi-dokumen baru bisa setelah MongoDB 4.0 — tetap lebih lemah daripada relational untuk domain yang sensitif.
const products = await db.collection("products").find({
price: { $gt: 500000 },
}).sort({ price: -1 }).limit(10).toArray()Redis adalah database in-memory — data tinggal di RAM sehingga aksesnya mikrodetik. Dua kasus paling umum di backend:
docker exec -it redis-lab redis-cli
redis-cli> SET product:42 '{"id":42,"name":"Keyboard","price":750000}' EX 300
redis-cli> GET product:42EX 300 memberi TTL 300 detik — data otomatis hilang. Pola cache ini menjadi dasar episode 9.
redis-cli> INCR login:user:5:attempts
redis-cli> EXPIRE login:user:5:attempts 900INCR adalah operasi atomik — aman dari race condition, persis yang kita butuhkan untuk menghitung percobaan login per menit (episode 20).
Tip
Rule of thumb yang paling sering dipakai di industri: datanya punya struktur relasional dan butuh konsistensi → relational; datanya butuh akses super cepat atau skema fleksibel → NoSQL. Kebanyakan sistem sehat memakai keduanya: PostgreSQL untuk data inti, Redis untuk kecepatan.
Tanyakan lima hal ini saat memilih database:
Order, saldo, pembayaran → relational (ACID). Ini bukan wilayah NoSQL kecuali dengan pengorbanan besar.
Satu objek utuh yang dinikmati apa adanya (profil, konten) → document store. Data yang dipecah dan digabung dengan berbagai cara → relational.
Skema berubah tiap minggu tanpa migration berat → document store fleksibel. Skema stabil dan jadi kontrak → relational lebih aman.
Baca masif dengan latency mikrodetik → Redis/DynamoDB. Baca normal dengan konsistensi → relational + cache.
Satu node utama dengan replika → relational biasa. Scale-out horizontal sejak awal → NoSQL (MongoDB, Cassandra).
PostgreSQL. Setiap sen harus akurat, audit lengkap, dan atomic — relational dengan ACID adalah pilihan wajib.
Redis (key-value). Akses cepat, TTL untuk keranjang yang ditinggalkan, struktur hash untuk item: HSET cart:5 item:1 2. Keranjang tidak butuh query kompleks.
MongoDB. Produk punya field opsional, variant, dan spesifikasi yang berbeda per kategori — document store sangat nyaman tanpa migration.
Redis Sorted Set — ZINCRBY leaderboard 5 user:42 memberi ranking terurut dengan performa luar biasa.
Memindahkan semua data ke MongoDB karena "lebih cepat" justru melahirkan data tidak konsisten. Database bukan PR — pilih berdasarkan kebutuhan data, bukan tren.
Redis tidak menggantikan PostgreSQL — ia lapisan di depan untuk kecepatan. Saat Redis kosong (cold start), database tetap harus bisa melayani. Episode 9 membahas pola ini.
Denormalisasi di document store mempercepat baca tapi menyulitkan update (data diduplikasi di banyak tempat). Sebelum denormalisasi, tanyakan: seberapa sering field ini berubah?
Episode 6 memetakan dunia NoSQL: document store (MongoDB) untuk data fleksibel, key-value (Redis) untuk kecepatan ekstrem, plus column-family dan graph, dengan kerangka keputusan lima pertanyaan dan praktik memilih database per kasus.
Inti yang harus dibawa pulang:
Di episode 7 selanjutnya kita akan mengamankan akses: authentication & authorization — session dan JWT, OAuth2/OIDC, RBAC, dan keamanan password, lengkap dengan implementasi end-to-end. Sampai jumpa di episode 7!