All posts

Designing Data Intensive Applications: Inti Merancang Sistem Data

Tim BacaApps12 October 2026 4 min read

Designing Data Intensive Applications: Inti Merancang Sistem Data

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:

  1. 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.
  2. 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

Designing Data Intensive Applications

The book in this post

Martin Kleppmann

"Designing Data Intensive Applications" oleh Martin Kleppmann adalah buku panduan mendalam yang mengupas tuntas cara membangun sistem data yang andal, skalabel, dan mudah dipelihara di era modern. Buku ini menjawab tantangan berat seputar volume data raksasa, jaringan yang rentan putus, serta risiko ketidakkonsistenan data saat ribuan pengguna mengakses layanan secara bersamaan. Melalui penjelasan prinsip internal basis data, mekanisme replikasi, partisi, hingga pemrosesan aliran data, kamu diajak memahami kompromi teknis di balik setiap pilihan arsitektur. Panduan ini membantumu merancang perangkat lunak yang tangguh menghadapi beban dunia nyata tanpa mudah terjebak oleh tren teknologi sesaat.

Read the summary