Building Real Time Data Warehouse

Tri Juhari
4 min readAug 4, 2021

--

Banyak seorang data engineer yang sebelumnya menggunakan batch processing bertanya tanya terkait sistem pemrosesan data secara real time.

Data model apa yang paling cocok dalam mengimplementasikan pemrosesan data secara real time ?

Mencari solusi yang tepat bagaimana membuat Data Warheouse untuk data real time ?

Pemrosesan Data Real Time

Sebelumnya kita perlu mendefinisikan apa itu pemrosesan data real time . Ketika kita mendengar kata real time otak kita langsung memproses bahwa real time merupakan kejadian yang terjadi saat ini.Nyatanya terdapat perbedaan level dari sistem real time, diantaranya :

  1. micro second systems ( Sistem Mikro Detik )
  2. milli second systems (Sistem Mili Detik)
  3. second or minute systems ( Sistem Menit atau Detik)

Kebutuhan Data Real Time

Langkah pertama ketika akan membangun pemrosesan data secara realtime yaitu memahami kebutuhan data secara real time.Hal ini biasanya juga di didasari atas kebutuhan bisnis.Sebagian besar data real time ini digunakan untuk menunjang kebutuhan untuk proses analisis atau data science dan tidak menjadi masalah jika datanya itu mengalami delay 1 jam.Ketika data real time dibutuhkan oleh suatu aplikasi akan menjadi ideal jika memiliki waktu delay yang tidak begitu besar misalnya jika data tersebut digunakan untuk proses yang penggunaannya secara otomatis misalnya untuk deteksi anomali.Kebanyakan dari perusahaan juga memahami bahwa data yang di proses secara real time hanya irisan kecil dari keseluruhan data yang masuk. Kebutuhan aka data realtime kadang menjadi sebuah tradeoff antara kebutuhan bisnis dan biaya pengembangan software yang dibutuhkan untuk menunjang pemrosesan data secara real time dan kebutuhan data realtime ini tergantung pada kebutuhan bisnis dari perusahaan.

Model Pemrosesan Data

Banyak perusahaan yang menyimpan keselurahan datanya di data warehouse menggunakan lebih dari satu model pemrosesa data dan mengkombinasikan berbagai macam model yang sesui dengan kebutuhan bisnisnya.Contohnya saja mengkombinasikan pemrosesan secara real time dan pemrosesan secara kelompok (batch). Data Consumer perlu paham kapan dan bagimana menggunakan data real time dan batch yang tersedia.Ketika pemrosesan data secara real time sebagaian besar pemrosesan data berada pada tingkat baris (row level) misalnya jika kita ingin melakukan agregasi ( misalnya jumlah click di waktu terakhir permainan ) maka diperlukan windowing (mini batching).

Menerapkan Waktu Proses pada Modular Data

Konsep ini tidak hanya diterapkan pada pemrosesan data real time saja tapi untuk semua sistem pemrosesan data. Dengan menuliskan logika pada pemrosesan data sedemikian rupa sehingga dapat diskalakan dalam kerangka waktu apapun.Mengapa hal ini penting , karena mungkin saja kita akan melakukan pemrosesan yang sama dengan batch yang besar pada pemrosesan batchnya dan mini batch pada pemrosesan real time.Pada skenario ini pemrosesan secara real time akan memberikan data terbaru namun mungkin akan terjadi delay atau kejadian yang tidak sesuai, namun dengan proses batch ini hal tersebut dapat diatasi (delay event).

Misalnya jika kita menuliskan query SQL untuk menggabungkan error pada log data

# do not this 
def get_data_proc_query() :
return "SELECT log_id, count(errors) err_count FROM log_data WHERE datetime_field > now() - 5 min"
# do this
def get_data_proc_query(start_time, end_time) :
return f"SELECT log_id, count(errors) err_count FROM log_data WHERE datetime_field >= {start_time} AND datetime_field < {end_time}"

Kita bisa lihat kedua perbedaan dari fungsi query diatas, sebagia catatan bahwa fungsi query yang disarankan dapat :

  • Melakukan eksekusi pada interval waktu apapun
  • Mencegah pesan yang yang datang terlambat agar tidak merusak err_count dari kerangka waktu lain

Tools

Ada banyak tools yang open source yang dapat digunakan untuk pemrosesan data secara realtime. Setiap tools memiliki peruntukannya masing masing, kita bisa sesuaikan berdasarkan kebutuhan bisnis sekarang dan kebutuhan bisnis jangka panjang.Ada beberapa opsi yang dapat digunakan diantaranya :

Apache Spark

Salah satu framework pemrosesan data paling populer dan memiliki komunitas yang besar dan merupakan famework yang sangat aktif. Apache Spark awalnya merupakan framework pemrosesan batch tetapi kemudian menambahkan fitur streaming dengan menggunakan batch pada skala yang jauh lebih kecil (mini-batch), tetapi baru-baru ini telah merilis implementasi streaming tanpa menggunakan batch.

Apache Flink

Merupakan pelopor framework streaming dan menyediakan mekanisme pemrosesan streaming advance dan apache flink lebih cepat daripada spark saat melakukan pemrosesan berulang berbasis stream (mis. pengoptimalan ML).

Akka

Merupakan library yang tersedia di Java dan Scala berdasarkan model aktor.Library ini digunakan untuk kebutuhan yang lebih spesifik. Misalnya jika kita melakukan pemrosesan data streaming berdasarkan persyaratan domain yang sangat kompleks, menggunakan data yang masuk untuk membangun knowledge graph.

--

--

No responses yet