Designing Data Intensive Applications: Inti Merancang Sistem Data
Tim BacaApps12 October 2026 4 min read

Mengapa aplikasi belanja daring tetap lancar saat jutaan orang berburu diskon bersamaan? Bagaimana saldo rekening tidak tertukar meski ribuan transaksi terjadi dalam satu detik? Designing Data Intensive Applications karya Martin Kleppmann membedah prinsip di balik sistem seperti itu.
Kleppmann mengamati bahwa tantangan utama perangkat lunak modern bukan lagi kecepatan prosesor, melainkan volume, kerumitan, dan laju perubahan data. Buku ini mengajakmu melihat lebih jauh dari istilah populer seperti NoSQL atau Big Data, dan memahami kompromi teknis di balik setiap pilihan arsitektur. Berikut pelajaran utamanya.
Tiga pilar: andal, skalabel, mudah dipelihara
Kleppmann membuka dengan tiga tujuan utama sistem data:
- Keandalan. Sistem tetap bekerja benar meski terjadi gangguan, entah dari perangkat keras, perangkat lunak, maupun kesalahan manusia.
- Skalabilitas. Sistem punya cara yang masuk akal untuk menghadapi beban yang terus bertambah.
- Kemudahan pemeliharaan. Orang lain bisa memahami, mengoperasikan, dan mengubah sistem itu di kemudian hari.
Pelajaran pentingnya: kegagalan pasti terjadi. Tujuannya bukan mencegah semua kegagalan, melainkan merancang sistem yang tetap bertahan saat sebagian komponennya gagal.
Model data dan mesin penyimpanan
Pilih model data sesuai bentuk masalahnya
Buku ini membandingkan model data relasional, dokumen, dan graf. Tidak ada yang selalu lebih unggul. Model dokumen cocok untuk data yang cenderung berdiri sendiri, seperti profil pengguna. Model relasional kuat saat data saling berhubungan dan sering digabung. Model graf berguna ketika hubungan antardata sangat rumit, misalnya jaringan pertemanan.
Pertanyaan yang tepat bukan basis data mana yang paling populer, tetapi bagaimana data aplikasimu sebenarnya saling terhubung.
Memahami isi mesin penyimpanan
Kleppmann juga mengajakmu mengintip cara basis data menyimpan dan mencari data. Dua struktur yang dibahas mendalam adalah B-tree dan LSM-tree.
B-tree sudah lama menjadi andalan banyak basis data relasional dan umumnya kuat untuk pembacaan. LSM-tree dirancang untuk menangani penulisan data dalam jumlah besar dengan efisien. Memahami perbedaan ini membantumu memilih teknologi berdasarkan pola beban nyata, bukan sekadar tren.
Bersiap menghadapi perubahan
Aplikasi tidak pernah diam. Fitur bertambah, struktur data berubah, dan versi lama serta versi baru program sering berjalan bersamaan selama pembaruan. Kleppmann membahas pentingnya format data yang tetap bisa dibaca oleh kode lama maupun kode baru, agar pembaruan tidak merusak data yang sudah ada.
Replikasi dan partisi untuk menghadapi skala
Saat satu mesin tidak lagi cukup, data perlu disebar. Ada dua teknik utama:
- Replikasi, yaitu menyimpan salinan data yang sama di beberapa mesin. Tujuannya agar sistem tetap jalan saat satu mesin mati dan beban baca bisa dibagi. Tantangannya, salinan bisa sempat tertinggal sehingga pengguna melihat data lama.
- Partisi, yaitu memecah data besar menjadi bagian-bagian di mesin berbeda. Tantangannya adalah membagi data secara merata agar tidak ada satu mesin yang kewalahan sendirian.
Bayangkan aplikasi ojek daring. Jika semua data pesanan satu kota besar menumpuk di satu partisi, mesin itu akan kewalahan pada jam sibuk, sementara mesin lain menganggur.
Jaringan tidak bisa dipercaya sepenuhnya
Bagian yang paling membuka mata adalah pembahasan tentang masalah sistem terdistribusi. Pesan bisa hilang atau terlambat, jam di tiap mesin bisa berbeda, dan sebuah mesin bisa tampak mati padahal hanya lambat.
Di sinilah transaksi dan algoritma konsensus berperan. Keduanya membantu beberapa mesin menyepakati satu keadaan data yang sama, meski jaringan tidak stabil. Kleppmann menjelaskan bahwa jaminan konsistensi yang lebih kuat biasanya dibayar dengan kinerja atau ketersediaan.
Masalah serupa muncul bahkan di satu basis data saat banyak pengguna mengubah data bersamaan. Bayangkan dua orang memesan kursi terakhir di sebuah bus antarkota pada detik yang sama. Tanpa tingkat isolasi transaksi yang tepat, keduanya bisa sama-sama mendapat konfirmasi. Buku ini membantu kamu memahami jaminan apa yang sebenarnya diberikan basis data, dan apa yang tidak.
Data yang terus mengalir
Buku ini juga membahas pemrosesan data secara batch dan aliran data. Batch memproses kumpulan data besar sekaligus, sedangkan pemrosesan aliran menangani kejadian begitu datang. Banyak sistem modern menggabungkan keduanya untuk menjaga data di berbagai tempat tetap selaras.
Contohnya, saat sebuah pesanan dibuat, data itu mungkin perlu diteruskan ke indeks pencarian, sistem rekomendasi, dan laporan keuangan. Memperlakukan perubahan data sebagai aliran kejadian membantu semua tempat itu tetap mutakhir tanpa saling bergantung secara rumit.
Merancang dengan memahami kompromi
Pelajaran terbesar dari buku ini adalah bahwa setiap pilihan arsitektur punya kompromi. Insinyur yang baik tidak mencari solusi sempurna, tetapi memahami apa yang dikorbankan dan apa yang didapat dari setiap keputusan.
Jika kamu ingin memahami prinsip-prinsip ini secara lebih runtut, baca ringkasan lengkap Designing Data Intensive Applications di aplikasi BacaApps.
Baca ringkasan lengkapnya di BacaApps: Designing Data Intensive Applications karya Martin Kleppmann
