
Daftar Isi
Anda memiliki aplikasi yang perlu merespons perubahan data secara real-time — misalnya, menampilkan notifikasi ketika ada transaksi baru atau memperbarui dashboard tanpa harus melakukan refresh halaman. Solusi konvensional biasanya menggunakan polling database secara berkala, namun cara ini tidak efisien dan membebani server.
Nah, di sinilah MongoDB Change Streams hadir sebagai penyelamat. Dengan fitur ini, Anda bisa membangun event-driven database, di mana aplikasi Anda akan mendengarkan perubahan data dan bereaksi secara otomatis — seolah-olah database Anda memiliki “sensor peristiwa” yang selalu siaga.
Namun, banyak pemula merasa bingung:
- “Bagaimana cara kerja Change Streams sebenarnya?”
- “Apakah saya perlu membuat sistem event terpisah?”
- “Bagaimana implementasinya secara praktis?”
Tenang, artikel ini akan menjawab semua pertanyaan tersebut. Anda akan mempelajari langkah demi langkah mulai dari konsep dasar event-driven database, konfigurasi MongoDB Change Streams, hingga contoh implementasi real-time sederhana.
Apa Itu Event-Driven Database?
Event-driven database adalah sistem di mana perubahan data menjadi pemicu (event) untuk menjalankan aksi tertentu. Misalnya:
- Saat data pengguna baru ditambahkan, sistem langsung mengirim email selamat datang.
- Ketika stok barang berkurang, sistem langsung memperbarui dashboard inventori.
Dengan pendekatan ini, aplikasi Anda menjadi lebih responsif, hemat sumber daya, dan mudah diskalakan.
Mengenal MongoDB Change Streams
MongoDB Change Streams adalah fitur bawaan MongoDB yang memungkinkan Anda mendengarkan perubahan data di koleksi, database, atau bahkan seluruh cluster tanpa harus terus-menerus melakukan query manual.
Change Streams bekerja dengan memanfaatkan MongoDB oplog (operation log) — catatan internal yang mencatat setiap operasi tulis (insert, update, delete) di server. Ketika ada perubahan, event akan dikirimkan ke aplikasi Anda dalam bentuk stream.
Cara Kerja Singkat MongoDB Change Streams
- Aplikasi membuka koneksi ke MongoDB.
- Aplikasi “berlangganan” (subscribe) pada koleksi tertentu.
- MongoDB mengirim event setiap kali data pada koleksi itu berubah.
- Aplikasi menangani event sesuai logika yang Anda buat (misalnya, kirim notifikasi atau update cache).
Langkah-demi-Langkah Menggunakan MongoDB Change Streams
1. Persiapan Lingkungan
Pastikan Anda sudah menginstal:
- MongoDB versi 3.6 atau lebih baru (karena Change Streams diperkenalkan sejak versi ini).
- Node.js (untuk contoh implementasi kode).
- MongoDB Driver untuk Node.js
Instal dengan perintah:
npm install mongodb2. Membuka Koneksi ke MongoDB
Contoh sederhana dengan Node.js:
const { MongoClient } = require("mongodb");
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
try {
await client.connect();
const db = client.db("shop");
const collection = db.collection("orders");
console.log("Terhubung ke MongoDB, menunggu perubahan...");
} catch (err) {
console.error(err);
}
}
main();3. Mengaktifkan Change Stream
Sekarang, buat aplikasi Anda mendengarkan perubahan di koleksi “orders”:
const changeStream = collection.watch();
changeStream.on("change", (next) => {
console.log("Perubahan terdeteksi:", next);
});Setiap kali ada operasi insert, update, atau delete, event akan muncul otomatis di terminal Anda.
4. Menangani Jenis Event Tertentu
Anda bisa menyesuaikan aksi berdasarkan tipe perubahan.
changeStream.on("change", (change) => {
switch (change.operationType) {
case "insert":
console.log("Pesanan baru:", change.fullDocument);
break;
case "update":
console.log("Pesanan diperbarui:", change.updateDescription);
break;
case "delete":
console.log("Pesanan dihapus:", change.documentKey);
break;
}
});Dengan logika seperti ini, Anda bisa mengirim notifikasi real-time ke frontend, memperbarui dashboard, atau memicu proses lain secara otomatis.
5. Menutup Change Stream dengan Aman
Untuk mencegah kebocoran koneksi, pastikan Anda menutup Change Stream dengan benar saat aplikasi berhenti.
process.on("SIGINT", async () => {
await changeStream.close();
await client.close();
console.log("Koneksi ditutup.");
process.exit(0);
});Tips Penting
- Gunakan filter pipeline agar Change Streams hanya mendeteksi event yang Anda butuhkan, misalnya hanya insert:
const changeStream = collection.watch([{ $match: { operationType: "insert" } }]);- Pastikan Anda menjalankan MongoDB dalam mode replica set, karena Change Streams tidak berfungsi di mode standalone.
Jalankan ini di Mongo Shell:
rs.initiate()Anda sudah tahu bagaimana event-driven database bekerja dan bagaimana MongoDB Change Streams dapat membuat aplikasi Anda bereaksi terhadap perubahan data secara real-time. Dengan pemahaman ini, Anda bisa membangun sistem yang lebih efisien, responsif, dan siap skala besar.
Ingin melangkah lebih jauh?
Baca juga: “Membangun Real-Time Notification Service dengan Node.js dan MongoDB”
