Merancang lapisan data solusi secara utuh: memilih antara relational, NoSQL, warehouse, dan object storage berdasarkan pola akses, menyusun arsitektur data platform dari OLTP hingga analitik, serta strategi caching dan modeling yang menjaga data tetap sehat saat volume membesar

Setelah di episode 6 solusi kalian bisa "berbicara" dengan sistem lain lewat integrasi sinkron/asinkron yang idempotent, sekarang kita bahas komponen yang paling sering menentukan umur sebuah solusi: datanya sendiri. Aplikasi bisa ditulis ulang dalam beberapa bulan; keputusan data yang salah akan menghantui bertahun-tahun — karena migrasi data besar itu mahal, lambat, dan berisiko.
Mengapa ini penting bagi SA? Karena pertanyaan "data ini disimpan apa?" hampir selalu punya jawaban salah jika ditanyakan terlambat. Tim development cenderung menjawab cepat dengan "PostgreSQL semua" atau sebaliknya "pakai NoSQL biar keren". Tugas kalian mencocokkan pola akses dengan karakteristik storage — bukan selera.
Empat keluarga besar yang wajib kalian kuasai:
| Keluarga | Kekuatan | Kelemahan | Cocok Untuk |
|---|---|---|---|
| Relational (PostgreSQL, MySQL, SQL Server) | Transaksi ACID, join, integritas skema | Scaling horizontal butuh usaha | Data transaksional inti (orders, payments) |
| Key-value / Document (DynamoDB, Firestore, MongoDB) | Latensi milidetik pada skala besar, skema fleksibel | Query non-key mahal, tanpa join | Session, profil user, keranjang, leaderboard |
| Warehouse / OLAP (BigQuery, Redshift, Synapse) | Analisis kolom raksasa, agregasi cepat | Tidak untuk transaksi online, biaya scan | Reporting, BI, historis bertahun-tahun |
| Object storage (S3, Blob Storage, GCS) | Murah tak terbatas, durability tinggi | Tidak ada query record-level | File, gambar, backup, data lake |
Prosedur pemilihan yang disiplin: tulis dulu pola akses dalam kalimat konkret — "cari order berdasarkan ID", "daftar event terdekat per kota", "total penjualan per bulan 3 tahun terakhir" — baru cocokkan. Kalimat pola akses itulah yang menentukan, bukan nama teknologi yang sedang tren.
Terapkan pada studi kasus kita:
Orders & payments -> PostgreSQL (ACID: uang tidak boleh setengah jadi)
Seat map live -> Redis (baca/tulis super cepat, TTL lock 10 menit)
Gambar poster event -> Object storage + CDN (murah, statis)
Riwayat & analitik -> Warehouse (agregasi penjualan, tanpa ganggu OLTP)
Log pemindaian QR -> NoSQL document (volume tinggi, tulis-append)Perhatikan bahwa satu solusi memakai empat jenis storage — itu normal dan sehat. Yang tidak sehat adalah memaksakan satu database melayani workload transaksional sekaligus analitik berat, lalu heran kenapa checkout ikut lambat tiap kali tim finance tarik laporan bulanan.
Ketika kebutuhan analitik tumbuh, pola arsitekturnya berkembang menjadi platform data. Bentuk klasiknya:
Tiga zona yang lazim di data lake modern:
Prinsip penting: OLTP dan analitik dipisahkan. CDC (change data capture, misal Debezium atau logical replication) menyalin perubahan dari database operasional ke pipeline tanpa memberatkan production.
Cache sering diperlakukan sebagai tambalan performa belakangan — padahal desain cache yang benar harus dipikirkan bersama data model:
Warning
Cache tanpa rencana invalidasi adalah bug tertunda: user melihat kursi "tersedia" padahal terjual karena seat map di-cache terlalu lama. Untuk data yang berubah akibat transaksi uang, invalidasi harus dipicu event, bukan mengandalkan TTL semata.
Beberapa praktik modeling yang menyelamatkan kalian nanti:
DELETE masif.Untuk warehouse modern, teknik ELT mendominasi: muat mentah dulu ke raw zone, transformasi dengan SQL ter-versioned (dbt misalnya), sehingga transformasi bisa dites dan direplay. Ini kebalikan ETL klasik dan lebih cocok dengan prinsip raw-immutable di atas.
Inti yang harus dibawa pulang:
Di episode 8 selanjutnya kita akan membahas security solution design — menyuntikkan security ke dalam solusi sejak awal: threat model ringkas, enkripsi in transit/at rest, manajemen secret, identity untuk manusia maupun service, dan bagaimana compliance mempengaruhi pilihan desain. Sampai jumpa di episode 8!