Siklus hidup data pada chapter sebelumnya menggambarkan perjalanan data dari hulu ke hilir. Pertanyaan berikutnya: bagaimana tahapan tersebut disusun menjadi satu kesatuan sistem? Susunan itu disebut arsitektur sistem data — peta yang menentukan komponen apa saja yang dibutuhkan, bagaimana komponen tersambung, dan di mana setiap tahap siklus hidup dijalankan. Arsitektur yang tepat membuat sistem mudah dirawat; arsitektur yang asal susun membuat setiap perubahan kecil menuntut penataan ulang besar. Pada chapter ini kita akan membedah lapisan-lapisan arsitektur sistem data, mensimulasikannya dalam skala kecil, lalu mengenal pola arsitektur yang umum dijumpai di industri.
Lapisan Arsitektur Sistem Data #
Sebagian besar arsitektur sistem data modern tersusun atas lima kelompok komponen berikut:
- Sources: sistem tempat data lahir — database aplikasi seperti PostgreSQL, API pihak ketiga, hingga file CSV dari sistem lama.
- Ingestion: jalur yang membawa data masuk, baik berupa job terjadwal (batch) maupun aliran event (stream) lewat Kafka.
- Storage: tempat data disimpan, lazimnya berlapis — raw untuk data mentah, staging untuk data yang sedang dibersihkan, curated untuk data siap pakai.
- Transformation: tahap pengolahan yang membersihkan dan menggabungkan data, dijalankan Spark untuk skala besar atau dbt untuk transformasi SQL di warehouse.
- Serving: lapisan penyajian — tabel warehouse untuk dashboard, fitur untuk model machine learning, ekspor untuk audit.
Alur pada diagram membaca dari kiri ke kanan: makin ke kanan, makin sedikit orang yang menyentuh data secara langsung dan makin banyak pihak yang mengonsumsinya.
Simulasi Tiga Lapisan Storage #
Konsep lapisan storage akan lebih mudah dipahami lewat simulasi kecil. Program berikut meniru perjalanan data melewati tiga lapisan: raw (apa adanya), staging (dibersihkan dan dinormalisasi), lalu curated (agregat siap pakai untuk dashboard).
# Layer raw: data apa adanya dari source (contoh: export order harian)
raw = [
"TRX001|Budi|2026-01-05|125000|jakarta",
"TRX002|Siti|2026-01-05|75000|Jakarta",
"TRX003|Dewi|2026-01-06|210000|bandung",
"TRX004|Budi|2026-01-06|99000|Jakarta",
]
# Layer staging: dibersihkan dan dinormalisasi
staging = []
for baris in raw:
id_trx, nama, tanggal, jumlah, kota = baris.split("|")
staging.append({
"id_trx": id_trx,
"nama": nama,
"tanggal": tanggal,
"jumlah": int(jumlah),
"kota": kota.title(),
})
# Layer curated: agregat siap pakai untuk dashboard
curated = {}
for baris in staging:
curated[baris["kota"]] = curated.get(baris["kota"], 0) + baris["jumlah"]
print("Layer curated — total transaksi per kota:")
for kota, total in sorted(curated.items()):
print(f"{kota}: Rp{total:,}")Output yang Dihasilkan:
Layer curated — total transaksi per kota:
Bandung: Rp210,000
Jakarta: Rp299,000Mari kita telaah baris-baris kode di atas:
- Baris 2-7 (
raw = [...]): layer raw menyimpan data persis seperti yang diterima dari sumber — penulisan kota masih campur aduk, jumlah masih berupa teks. - Baris 9-19 (blok staging): layer staging mengubah tipe data
jumlahmenjadi integer dan menyeragamkan nama kota lewat.title(). Perubahan bentuk terjadi di sini, bukan di raw. - Baris 22-24 (loop curated): layer curated meringkas data menjadi satu angka per kota — bentuk yang langsung terbaca oleh dashboard.
- Baris 26-28 (
print): konsumen data hanya menyentuh layer curated; detail berantakan di raw tidak pernah sampai ke dashboard.
Pola tiga lapisan tersebut di industri dikenal sebagai medallion architecture dengan sebutan Bronze (raw), Silver (staging), dan Gold (curated). Manfaat utamanya: bila transformasi ternyata keliru, kita mengulang dari layer mentah tanpa kehilangan apa pun.
Pola Arsitektur yang Umum Dijumpai #
Beberapa pola kerap muncul saat kita membaca arsitektur perusahaan data:
- ETL vs ELT: data dibersihkan sebelum masuk warehouse (Extract-Transform-Load) atau dimuat mentah dulu lalu ditransformasi di dalam warehouse (Extract-Load-Transform) — ELT kini lazim karena warehouse modern sanggup memproses data di tempat.
- Lakehouse: data lake (object storage) dipadukan dengan table format seperti Apache Iceberg agar mendapat fitur tabel warehouse di atas penyimpanan murah.
- Streaming-first: event mengalir lewat Kafka sejak awal, sehingga data segar tersedia tanpa menunggu jadwal batch.
- Format kolom: data analitik disimpan dalam format kolom seperti Parquet yang jauh lebih efisien untuk agregasi dibanding format baris.
Bagaimana data bergerak di dalam arsitektur tersebut juga menentukan bentuk sistemnya — sebagian tahap berjalan terjadwal dalam kelompok besar, sebagian berjalan per event seketika. Kita akan bandingkan dua gaya pemrosesan tersebut pada chapter Batch Processing vs Stream Processing.