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).

python
# 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:

text
Layer curated — total transaksi per kota:
Bandung: Rp210,000
Jakarta: Rp299,000

Mari kita telaah baris-baris kode di atas:

  1. Baris 2-7 (raw = [...]): layer raw menyimpan data persis seperti yang diterima dari sumber — penulisan kota masih campur aduk, jumlah masih berupa teks.
  2. Baris 9-19 (blok staging): layer staging mengubah tipe data jumlah menjadi integer dan menyeragamkan nama kota lewat .title(). Perubahan bentuk terjadi di sini, bukan di raw.
  3. Baris 22-24 (loop curated): layer curated meringkas data menjadi satu angka per kota — bentuk yang langsung terbaca oleh dashboard.
  4. 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.