(0275) 2974 127
Dalam sistem digital, data terus berubah setiap saat. Data pelanggan dapat diperbarui, transaksi baru masuk, stok produk berubah, atau status pesanan berpindah dari diproses menjadi selesai. Perubahan-perubahan tersebut perlu diketahui oleh sistem lain agar data tetap sinkron dan proses bisnis dapat berjalan dengan baik.
Salah satu pendekatan yang digunakan untuk menangkap perubahan data secara efisien adalah Change Data Capture (CDC).
CDC memungkinkan sistem mendeteksi perubahan yang terjadi pada sumber data, seperti operasi insert, update, dan delete, kemudian meneruskan informasi perubahan tersebut ke sistem lain. Dengan pendekatan ini, aplikasi tidak harus membaca seluruh isi database secara berulang hanya untuk mengetahui data apa yang berubah.
Teknologi ini banyak digunakan dalam berbagai kebutuhan modern, mulai dari data integration, real-time analytics, data warehouse, data lake, event-driven architecture, hingga sinkronisasi database. Lalu, apa itu Change Data Capture, bagaimana cara kerjanya, apa saja jenisnya, dan kapan teknologi ini sebaiknya digunakan? Berikut pembahasan lengkapnya!
Change Data Capture (CDC) adalah teknik untuk mengidentifikasi dan menangkap perubahan yang terjadi pada data di sebuah sumber, kemudian menyediakan informasi mengenai perubahan tersebut agar dapat diproses oleh sistem lain. Perubahan yang ditangkap umumnya mencakup:
Sebagai contoh, sebuah toko online memiliki tabel orders dengan data pesanan pelanggan. Ketika pelanggan membuat pesanan baru:
INSERT
Order ID: 10025
Status: Paid
CDC dapat menangkap perubahan tersebut dan meneruskannya ke sistem lain, misalnya:
Database
↓
CDC
↓
Message Broker
↓
Data Warehouse
Dengan mekanisme tersebut, sistem tujuan tidak perlu terus-menerus memeriksa seluruh tabel untuk mencari data baru atau data yang berubah.
Secara sederhana, CDC dapat dianalogikan seperti sistem pemantauan perubahan dokumen. Sistem tidak perlu membaca seluruh dokumen setiap kali ingin mengetahui perubahan. Sebaliknya, sistem cukup mencatat bagian yang mengalami perubahan dan meneruskannya kepada pihak yang membutuhkan.
Pada sistem sederhana, proses sinkronisasi data dapat dilakukan dengan menyalin seluruh tabel secara berkala. Misalnya, database memiliki 10 juta baris data. Setiap malam, sistem mengambil seluruh data tersebut untuk dibandingkan dengan data sebelumnya.
Cara tersebut mungkin masih dapat diterapkan pada kondisi tertentu. Namun, ketika volume data semakin besar, pendekatan tersebut dapat menjadi tidak efisien. Bayangkan hanya ada 10.000 baris yang berubah dari 10 juta baris data. Sistem tetap harus membaca dan memproses data dalam jumlah sangat besar hanya untuk menemukan perubahan tersebut.
CDC menawarkan pendekatan yang berbeda:
10.000 data berubah
↓
CDC menangkap perubahan
↓
Hanya perubahan yang diteruskan
↓
Sistem tujuan memperbarui data
Pendekatan ini dapat mengurangi kebutuhan pemrosesan data yang tidak berubah dan membantu membangun pipeline data yang lebih responsif.
Secara umum, alur CDC dapat digambarkan dibawah ini. Setiap implementasi dapat memiliki arsitektur yang berbeda, tetapi konsep dasarnya relatif sama.
1. Data Berada di Source Database
Proses dimulai dari database sumber. Contohnya:
MySQL
PostgreSQL
SQL Server
Oracle
Database tersebut menyimpan data operasional yang digunakan aplikasi.
2. Terjadi Perubahan Data
Kemudian terjadi operasi terhadap data. Misalnya:
INSERT customer
UPDATE customer
DELETE customer
Perubahan tersebut menjadi informasi yang perlu ditangkap oleh CDC.
3. CDC Mendeteksi Perubahan
Komponen CDC membaca perubahan dari sumber data menggunakan metode tertentu. Metode yang digunakan bergantung pada teknologi CDC. Sebagian implementasi membaca transaction log, sementara metode lain dapat menggunakan timestamp, trigger, atau mekanisme database tertentu.
4. Perubahan Diubah Menjadi Event
Perubahan data kemudian dapat direpresentasikan sebagai event. Contohnya:
{
"operation": "UPDATE",
"table": "customers",
"id": 1024,
"before": {
"status": "inactive"
},
"after": {
"status": "active"
}
}
Format event sebenarnya dapat berbeda-beda tergantung teknologi yang digunakan.
5. Event Dikirim ke Sistem Tujuan
Event kemudian diteruskan ke consumer atau sistem tujuan. Contohnya:
CDC
↓
Kafka
↓
Data Warehouse
atau:
CDC
↓
Streaming Platform
↓
Search Engine
Sistem tujuan kemudian menggunakan event tersebut untuk memperbarui datanya.
CDC dapat diimplementasikan dengan beberapa pendekatan. Masing-masing memiliki karakteristik, kelebihan, dan keterbatasan yang berbeda. Secara umum, beberapa metode yang sering dibahas adalah log-based CDC, trigger-based CDC, timestamp-based CDC, dan query-based CDC.
1. Log-Based CDC
Log-based CDC memanfaatkan transaction log atau mekanisme log perubahan yang tersedia pada database. Database biasanya mencatat aktivitas transaksi untuk kebutuhan seperti recovery dan konsistensi data. CDC dapat membaca informasi perubahan tersebut dan meneruskannya ke sistem lain. Contohnya:
Database
↓
Transaction Log
↓
CDC Connector
↓
Event Stream
↓
Consumer
Metode ini banyak digunakan dalam arsitektur data modern karena dapat menangkap perubahan tanpa harus melakukan query berulang terhadap tabel utama. Beberapa teknologi CDC populer menggunakan pendekatan berbasis log untuk database tertentu.
2. Trigger-Based CDC
Pada metode ini, database menggunakan trigger untuk menjalankan tindakan tertentu ketika terjadi perubahan data. Misalnya, ketika sebuah baris diperbarui:
UPDATE customers
↓
Database Trigger
↓
CDC Table / Audit Table
Trigger kemudian dapat mencatat perubahan tersebut ke tabel khusus. Kelebihannya adalah mekanisme dapat diterapkan pada database yang mendukung trigger. Namun, trigger juga perlu dirancang dengan hati-hati karena logika tambahan tersebut berjalan dalam konteks operasi database.
3. Timestamp-Based CDC
Metode ini menggunakan kolom waktu untuk mengetahui kapan data terakhir diubah. Contohnya:
id | name | updated_at
---|-------|-------------------
1 | Andi | 2026-09-23 10:00
2 | Budi | 2026-09-24 08:00
Sistem kemudian mengambil data yang berubah setelah waktu tertentu. Misalnya:
SELECT *
FROM customers
WHERE updated_at > '2026-09-23 23:59:59';
Pendekatan ini relatif sederhana, tetapi memiliki keterbatasan. Salah satunya adalah penghapusan data. Ketika sebuah baris benar-benar dihapus, data tersebut tidak lagi tersedia untuk ditemukan melalui kolom updated_at.
Karena itu, timestamp-based CDC perlu dirancang dengan mekanisme tambahan apabila sistem harus menangkap operasi delete.
4. Query-Based CDC
Query-based CDC menggunakan query untuk secara berkala memeriksa database dan mencari perubahan. Misalnya:
Setiap 5 menit
↓
Query database
↓
Cari data yang berubah
↓
Kirim perubahan
Metode ini lebih sederhana untuk kebutuhan tertentu, tetapi semakin kurang ideal ketika volume data dan kebutuhan real-time semakin tinggi.
| Metode | Cara kerja | Kelebihan | Keterbatasan |
|---|---|---|---|
| Log-based | Membaca transaction/change log | Efisien dan dapat mendukung perubahan secara near real-time | Bergantung pada dukungan database dan konfigurasi log |
| Trigger-based | Trigger mencatat perubahan | Dapat menangkap perubahan secara langsung | Menambah logika dan beban pada database |
| Timestamp-based | Menggunakan waktu perubahan | Relatif sederhana | Delete perlu mekanisme tambahan |
| Query-based | Melakukan polling/query berkala | Mudah dipahami dan diterapkan | Dapat membebani database dan memiliki latency |
Tidak ada satu metode CDC yang selalu cocok untuk semua sistem. Pemilihan metode perlu mempertimbangkan database, volume transaksi, kebutuhan latency, jenis perubahan yang perlu ditangkap, dan arsitektur sistem.
CDC pada umumnya dapat menangkap tiga jenis operasi utama.
1. Insert
Insert terjadi ketika data baru ditambahkan. Contoh:
Customer baru
↓
INSERT
↓
CDC Event
2. Update
Update terjadi ketika data yang sudah ada mengalami perubahan. Misalnya:
Status: Pending
↓
Status: Paid
CDC dapat meneruskan informasi perubahan tersebut.
3. Delete
Delete terjadi ketika sebuah data dihapus. Contohnya:
Customer ID 1001
↓
DELETE
↓
CDC Event
Consumer kemudian dapat menghapus atau menandai data tersebut di sistem tujuan.
Misalnya sebuah perusahaan memiliki sistem e-commerce dengan database operasional: MySQLData pesanan berada di tabel:
orders
Perusahaan juga memiliki data warehouse untuk kebutuhan analitik. Tanpa CDC, salah satu pendekatan yang mungkin digunakan adalah:
MySQL
↓
Export seluruh data
↓
Data Warehouse
Proses tersebut dapat dilakukan secara berkala. Dengan CDC:
MySQL
↓
CDC
↓
Change Events
↓
Data Warehouse
Ketika sebuah order berubah dari: Pending menjadi Paid
CDC dapat menangkap perubahan tersebut sehingga sistem analitik dapat memperbarui data yang relevan tanpa harus mengambil seluruh tabel orders.
Salah satu penggunaan CDC yang cukup umum adalah mengirim perubahan dari database operasional ke data warehouse. Arsitekturnya dapat terlihat seperti:
Application
↓
Operational Database
↓
CDC
↓
Streaming / Message Broker
↓
ETL / ELT
↓
Data Warehouse
Contohnya, database transaksi menyimpan data penjualan. CDC menangkap:
INSERT order
UPDATE order
DELETE order
Kemudian perubahan tersebut dikirim ke pipeline data untuk diproses sebelum masuk ke data warehouse. Pendekatan ini membantu mengurangi kebutuhan melakukan full load secara terus-menerus.
CDC juga dapat digunakan untuk mengirim perubahan data menuju data lake. Contohnya:
PostgreSQL
↓
CDC
↓
Streaming
↓
Data Lake
Data yang dikumpulkan kemudian dapat digunakan untuk:
Namun, desain penyimpanan tetap perlu memperhatikan bagaimana event perubahan akan diproses, diurutkan, dan digunakan kembali.
CDC dapat membantu membangun pipeline analitik yang membutuhkan data dengan jeda relatif rendah. Misalnya sebuah platform e-commerce ingin memantau:
Jumlah transaksi
Stok produk
Nilai penjualan
Status pembayaran
Perubahan dari database operasional dapat dialirkan ke sistem analitik. Alurnya:
Database
↓
CDC
↓
Streaming
↓
Processing
↓
Analytics
Dengan demikian, data analitik tidak harus selalu menunggu proses batch besar berikutnya.
Namun, istilah real-time perlu digunakan secara hati-hati. Tidak semua CDC menghasilkan latency nol detik. Banyak implementasi lebih tepat disebut near real-time karena tetap memiliki jeda dalam proses capture, pengiriman, dan pemrosesan.
CDC dan ETL sering digunakan bersama, tetapi keduanya bukan hal yang sama. ETL (Extract, Transform, Load) merupakan pendekatan untuk mengambil data dari sumber, melakukan transformasi, kemudian memuatnya ke sistem tujuan.
Sementara itu, CDC berfokus pada bagaimana perubahan data di sumber dideteksi dan ditangkap. Perbedaannya dapat dilihat pada tabel berikut.
| Aspek | CDC | ETL |
|---|---|---|
| Fokus | Menangkap perubahan data | Memindahkan dan mentransformasi data |
| Tujuan | Mengetahui data yang berubah | Mengolah dan memuat data |
| Real-time | Dapat mendukung near real-time | Sering digunakan dalam batch, tetapi dapat pula dirancang untuk streaming |
| Transformasi | Bukan fungsi utamanya | Salah satu fungsi utama |
| Penggunaan | Sinkronisasi, event streaming, replication | Integrasi dan pemrosesan data |
CDC dan ETL bahkan dapat digunakan dalam satu pipeline. Contohnya:
Database
↓
CDC
↓
ETL / ELT
↓
Data Warehouse
CDC menangkap perubahan, sedangkan pipeline data melakukan transformasi dan pemuatan.
Full load berarti mengambil seluruh data dari sumber dan memuatnya ke sistem tujuan. Misalnya:
Source:
10.000.000 rows
Full Load:
10.000.000 rows diproses
Sementara dengan CDC, jika hanya 20.000 data yang berubah:
Source:
10.000.000 rows
CDC:
20.000 perubahan diproses
Perbedaan tersebut dapat menjadi signifikan ketika database berukuran besar dan perubahan harian relatif kecil dibandingkan keseluruhan data.
| Aspek | Full Load | CDC |
|---|---|---|
| Data yang diproses | Seluruh dataset | Perubahan data |
| Beban pemrosesan | Dapat tinggi | Cenderung lebih kecil untuk perubahan incremental |
| Efisiensi untuk perubahan kecil | Kurang efisien | Lebih efisien |
| Kompleksitas | Relatif sederhana | Lebih kompleks |
| Kebutuhan real-time | Tidak ideal jika dilakukan batch | Dapat mendukung near real-time |
| Cocok untuk | Dataset kecil atau initial load | Sinkronisasi incremental dan pipeline berkelanjutan |
Dalam praktiknya, CDC dan full load juga dapat digunakan bersama. Full load dapat digunakan untuk melakukan initial synchronization, kemudian CDC digunakan untuk menangkap perubahan berikutnya.
CDC memiliki sejumlah manfaat untuk arsitektur data modern.
1. Mengurangi Pemrosesan Data yang Tidak Berubah
CDC hanya berfokus pada perubahan yang terjadi sehingga sistem tidak harus terus memproses seluruh dataset.
2. Mendukung Sinkronisasi Data
Perubahan pada database sumber dapat diteruskan ke database atau sistem lainnya. Hal ini berguna ketika perusahaan memiliki beberapa sistem yang membutuhkan data yang sama.
3. Mendukung Data Pipeline Incremental
CDC dapat menjadi sumber perubahan untuk pipeline data incremental. Sistem tidak perlu melakukan full extraction secara terus-menerus.
4. Mendukung Arsitektur Near Real-Time
Perubahan dapat diteruskan segera setelah terdeteksi sehingga sistem tujuan dapat memperoleh data dengan latency yang relatif rendah.
5. Mengurangi Beban Query Berulang
Pada implementasi tertentu, CDC berbasis log dapat mengurangi kebutuhan melakukan polling terhadap tabel utama secara terus-menerus.
6. Membantu Integrasi Sistem
CDC dapat menjadi salah satu komponen yang menghubungkan database operasional dengan:
Walaupun memiliki banyak manfaat, CDC juga memiliki sejumlah tantangan.
1. Kompleksitas Infrastruktur
CDC biasanya tidak hanya melibatkan database sumber dan tujuan. Arsitektur dapat mencakup connector, message broker, stream processor, monitoring, dan sistem penyimpanan. Semakin kompleks arsitekturnya, semakin banyak komponen yang harus dikelola.
2. Menangani Urutan Perubahan
Urutan perubahan sangat penting. Misalnya:
UPDATE A
UPDATE B
UPDATE C
Sistem tujuan perlu memahami urutan event tersebut ketika urutan memang memiliki arti terhadap konsistensi data.
3. Duplicate Event
Dalam sistem terdistribusi, sebuah event dapat diproses lebih dari sekali tergantung desain pipeline. Karena itu, consumer perlu mempertimbangkan mekanisme idempotency agar pemrosesan ulang tidak menyebabkan data menjadi salah.
4. Schema Evolution
Struktur database dapat berubah. Misalnya:
customer_id
name
email
kemudian ditambahkan: phone, Pipeline CDC perlu mampu menangani perubahan schema tersebut dengan benar.
5. Delete Event
Operasi delete perlu ditangani secara khusus karena data yang sudah dihapus tidak lagi tersedia di tabel sumber. Sistem tujuan perlu mendapatkan informasi bahwa data tersebut memang telah dihapus.
6. Monitoring
Pipeline CDC harus dipantau. Beberapa hal yang dapat diperhatikan antara lain:
Tanpa monitoring yang baik, pipeline dapat berhenti atau mengalami keterlambatan tanpa segera diketahui.
Dalam arsitektur modern, CDC sering menggunakan connector yang bertugas menghubungkan database sumber dengan sistem streaming atau tujuan. Contoh alurnya:
Database
↓
CDC Connector
↓
Message Broker
↓
Consumer
Connector dapat bertugas membaca perubahan dari database dan mengubahnya menjadi event yang dapat diproses oleh sistem lain. Salah satu ekosistem yang banyak digunakan untuk kebutuhan tersebut adalah Apache Kafka, yang dapat dipadukan dengan teknologi CDC seperti Debezium.
Pemilihan connector tetap bergantung pada database, platform streaming, kebutuhan deployment, dan kemampuan operasional tim.
CDC juga dapat menjadi bagian dari event-driven architecture. Dalam pola tersebut, perubahan data dapat menghasilkan event yang kemudian dikonsumsi oleh beberapa layanan. Contohnya:
Database
↓
CDC
↓
"Order Updated"
↓
Message Broker
├── Notification Service
├── Analytics
├── Inventory
└── Data Warehouse
Dengan pendekatan ini, satu perubahan data dapat digunakan oleh berbagai sistem tanpa masing-masing sistem harus terus melakukan query ke database sumber.
Namun, penting membedakan database change event dengan business event. Perubahan pada sebuah baris database tidak selalu memiliki makna bisnis yang sama dengan event seperti OrderPaid, OrderShipped, atau CustomerRegistered.
CDC terutama menangkap perubahan pada data. Jika aplikasi membutuhkan event yang merepresentasikan proses bisnis, event tersebut dapat dirancang secara eksplisit pada level aplikasi.
CDC mulai menarik untuk dipertimbangkan ketika sistem memiliki kebutuhan seperti:
Sebaliknya, CDC mungkin tidak diperlukan jika aplikasi sangat sederhana dan kebutuhan sinkronisasi datanya dapat diselesaikan dengan proses batch biasa.
Meskipun Change Data Capture (CDC) dapat membantu menangkap dan mengalirkan perubahan data secara efisien, teknologi ini tidak selalu diperlukan untuk setiap aplikasi. Pada sistem dengan volume data yang masih kecil, perubahan data yang terjadi sangat jarang, atau kebutuhan sinkronisasi hanya dilakukan satu kali dalam sehari, penggunaan proses batch sederhana mungkin sudah cukup untuk memenuhi kebutuhan tersebut. Begitu pula pada aplikasi dengan arsitektur yang sederhana dan tidak membutuhkan sinkronisasi data dengan latency rendah.
Penerapan CDC pada kondisi yang belum membutuhkannya justru dapat menambah kompleksitas infrastruktur. Sistem perlu mengelola komponen tambahan seperti CDC connector, message broker, pipeline pemrosesan, monitoring, serta mekanisme penanganan error dan recovery.
Oleh karena itu, sebelum menggunakan CDC, sebaiknya pertimbangkan terlebih dahulu volume perubahan data, frekuensi sinkronisasi, kebutuhan latency, dan kompleksitas sistem. Jika kebutuhan tersebut masih dapat dipenuhi dengan proses batch yang lebih sederhana, CDC mungkin belum menjadi pilihan yang diperlukan.
Berikut salah satu contoh arsitektur yang umum:
┌──────────────────┐
│ Application │
└────────┬─────────┘
↓
┌──────────────────┐
│ Source Database │
└────────┬─────────┘
↓
┌──────────────────┐
│ CDC Connector │
└────────┬─────────┘
↓
┌──────────────────┐
│ Message Broker │
└────────┬─────────┘
↓
┌───────────┼───────────┐
↓ ↓ ↓
Data Lake Data Warehouse Search
Dengan arsitektur seperti ini, perubahan dari database operasional dapat digunakan oleh berbagai sistem secara terpisah. Hal tersebut dapat membantu mengurangi ketergantungan langsung antara aplikasi utama dan sistem analitik.
CDC dan database replication memiliki konsep yang berdekatan, tetapi tujuan dan implementasinya tidak selalu sama.
| Aspek | CDC | Database Replication |
|---|---|---|
| Fokus | Menangkap perubahan data | Menyalin perubahan ke replica |
| Tujuan | Integrasi, analitik, streaming, sinkronisasi | Menyediakan salinan database |
| Output | Change events atau perubahan terstruktur | Database replica |
| Consumer | Dapat banyak sistem | Umumnya replica tertentu |
| Penggunaan | Data pipeline dan integrasi | Availability, read scaling, atau salinan database |
Dalam beberapa arsitektur, teknologi yang sama dapat mendukung kemampuan yang beririsan, sehingga istilah dan implementasinya perlu dilihat berdasarkan konteks teknologinya.
Change Data Capture (CDC) adalah teknik untuk menangkap perubahan data seperti insert, update, dan delete, kemudian meneruskannya ke sistem lain secara efisien. CDC banyak digunakan untuk mendukung sinkronisasi data, data warehouse, data lake, hingga pipeline data yang membutuhkan pemrosesan secara near real-time.
Dengan metode seperti log-based, trigger-based, timestamp-based, dan query-based CDC, pemilihan teknologi dapat disesuaikan dengan kebutuhan database, volume data, latency, dan kompleksitas sistem. Meski menawarkan banyak manfaat, penerapan CDC tetap membutuhkan perencanaan dan monitoring agar pipeline berjalan konsisten.
Ingin mengetahui lebih banyak tentang teknologi, database, cloud, hosting, dan perkembangan digital lainnya? Kunjungi Blog Hosteko untuk menemukan berbagai artikel informatif dan praktis lainnya.
Sudah meletakkan HP jauh dari tempat tidur, tetapi beberapa menit kemudian mengambilnya lagi? Salah satu…
WordPress pada dasarnya menyediakan beberapa jenis konten seperti Post dan Page. Namun, kebutuhan sebuah website…
Perkembangan cloud computing, microservices, container, Kubernetes, dan DevOps membuat pengembangan aplikasi semakin fleksibel. Namun, semakin…
Salah satu cara praktis untuk mengurangi kebiasaan scrolling sebelum tidur adalah menjauhkan HP dari tempat…
Dalam lingkungan kerja maupun organisasi, kebutuhan untuk menyimpan dan berbagi file terus meningkat. Dokumen, gambar,…
Salah satu cara praktis untuk mengurangi kebiasaan scrolling sebelum tidur adalah menentukan batas waktu yang…