MongoDB - Map Reduce: Panduan untuk Pemula

Hai teman-teman, para master MongoDB masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia Map Reduce di MongoDB. Jangan khawatir jika Anda baru dalam programming – saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatunya langkah demi langkah. Jadi, ambil secangkir kopi, dan mari kita masuk ke dalamnya!

MongoDB - Map Reduce

Apa Itu Map Reduce?

Sebelum kita melompat ke spesifikasi MongoDB, mari kita pahami apa itu Map Reduce. Bayangkan Anda mencoba menghitung berapa banyak kelereng merah, biru, dan hijau yang Anda punyai di dalam sebuah beg besar. Map Reduce seperti memiliki tim teman yang membantu Anda:

  1. Salah satu teman (mapper) mengeluarkan kelereng dan menyebut warnanya.
  2. Teman lain (reducers) masing-masing mencatat jumlah warna tertentu.
  3. Di akhirnya, Anda mendapat total hitungan untuk setiap warna.

Itu Map Reduce dalam kecil-kecilan – itu adalah cara untuk memproses dan menyummarisasi jumlah data besar secara efisien.

Perintah MapReduce di MongoDB

Sekarang, mari kita lihat bagaimana kita bisa menggunakan Map Reduce di MongoDB. Struktur dasar operasi Map Reduce di MongoDB terlihat seperti ini:

db.collection.mapReduce(
function() { emit(key, value); },  // fungsi map
function(key, values) { return reduceFunction; },  // fungsi reduce
{
out: <output>,
query: <query>,
sort: <sort>,
limit: <limit>
}
)

Jangan khawatir jika ini terlihat menakutkan – kita akan membongkarnya piece by piece!

Fungsi Map

Fungsi map adalah tempat kita memutuskan data apa yang ingin kita proses. Itu seperti teman kita menyebut warna kelereng. Untuk setiap dokumen, kita menggunakan fungsi emit() untuk mengeluarkan kunci dan nilai.

Misal kita memiliki koleksi buku, dan kita ingin menghitung berapa banyak buku yang ditulis oleh setiap penulis:

function() {
emit(this.author, 1);
}

Fungsi ini mengatakan, "Untuk setiap buku, sebutkan nama penulis dan angka 1."

Fungsi Reduce

Fungsi reduce mengambil semua nilai yang diekspresikan untuk kunci tertentu dan menggabungkannya. Itu seperti teman kita mencatat jumlah setiap warna.

Untuk contoh buku kita:

function(key, values) {
return Array.sum(values);
}

Fungsi ini mengatakan, "Ambil semua 1 untuk setiap penulis dan tambahkan mereka."

Opsi

Objek opsi memungkinkan kita untuk menyesuaikan operasi Map Reduce kita:

  • out: Dimana hasil disimpan
  • query: Memfilter dokumen masukan
  • sort: Mengurutkan dokumen masukan
  • limit: Batasi jumlah dokumen yang diproses

Menggunakan MapReduce

Sekarang, mari kita gabungkan semua ini dengan contoh nyata. Bayangkan kita memiliki koleksi data penjualan, dan kita ingin menghitung total penjualan untuk setiap produk.

Pertama-tama, mari kita buat beberapa data contoh:

db.sales.insertMany([
{ product: "Widget A", quantity: 5, price: 10 },
{ product: "Gadget B", quantity: 2, price: 20 },
{ product: "Widget A", quantity: 3, price: 10 },
{ product: "Gizmo C", quantity: 1, price: 30 },
{ product: "Gadget B", quantity: 4, price: 20 }
]);

Sekarang, mari kita gunakan Map Reduce untuk menghitung total penjualan:

db.sales.mapReduce(
// Fungsi Map
function() {
emit(this.product, this.quantity * this.price);
},
// Fungsi Reduce
function(key, values) {
return Array.sum(values);
},
// Opsi
{
out: "product_sales"
}
)

mari kita rincikan ini:

  1. Fungsi map menghitung jumlah penjualan untuk setiap dokumen dan mengeluarkan nama produk sebagai kunci.
  2. Fungsi reduce menjumlahkan semua jumlah penjualan untuk setiap produk.
  3. Kita menyimpan hasilnya di koleksi baru yang disebut "product_sales".

Untuk melihat hasilnya:

db.product_sales.find()

Anda mungkin melihat sesuatu seperti ini:

{ "_id" : "Widget A", "value" : 80 }
{ "_id" : "Gadget B", "value" : 120 }
{ "_id" : "Gizmo C", "value" : 30 }

Voila! Kita telah berhasil menggunakan Map Reduce untuk menghitung total penjualan untuk setiap produk.

Kapan Harus Menggunakan Map Reduce

Map Reduce sangat kuat, tetapi itu tidak selalu alat terbaik untuk pekerjaan. Berikut adalah beberapa scenario di mana Map Reduce berjalan dengan baik:

  1. Agregasi kompleks yang tidak bisa dilakukan dengan pipeline agregasi
  2. Ketika Anda perlu memproses jumlah data besar yang tidak memuat di memori
  3. Ketika Anda perlu melakukan operasi yang tidak tersedia dalam bahasa query MongoDB

Namun, untuk tugas yang lebih sederhana, pipeline agregasi MongoDB seringkali lebih cepat dan mudah digunakan.

Kesimpulan

Selamat! Anda telah mengambil langkah pertama ke dunia Map Reduce di MongoDB. Kita telah menutupi dasar-dasar, tetapi masih banyak hal lain yang perlu dipelajari. Ingat, seperti belajar menunggang sepeda, menguasai Map Reduce memerlukan latihan. Jangan takut untuk mencoba dan membuat kesalahan – itu adalah bagaimana kita belajar!

Bersama ini, ini adalah tabel yang menyummarisasi komponen utama operasi Map Reduce:

Komponen Deskripsi Contoh
Fungsi Map Memproses setiap dokumen dan mengeluarkan pasangan kunci-nilai function() { emit(this.author, 1); }
Fungsi Reduce Menggabungkan nilai untuk setiap kunci function(key, values) { return Array.sum(values); }
Out Menentukan dimana hasil disimpan { out: "product_sales" }
Query Memfilter dokumen masukan { query: { price: { $gt: 10 } } }
Sort Mengurutkan dokumen masukan { sort: { price: 1 } }
Limit Batasi jumlah dokumen yang diproses { limit: 1000 }

Terus latih, tetap bersemangat, dan sebelum Anda tahu, Anda akan menjadi ahli Map Reduce! Happy coding!

Credits: Image by storyset