MongoDB - Panduan Map Reduce untuk Pemula

Hai sana, para master MongoDB masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia Map Reduce di MongoDB. Jangan khawatir jika Anda baru dalam pemrograman - saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatu secara 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. Satu teman (mapper) mengeluarkan kelereng dan menyebut warnanya.
  2. Teman lain (reducers) masing-masing menjumlahkan satu warna.
  3. Pada akhirnya, Anda mendapatkan total jumlah untuk setiap warna.

Itu saja Map Reduce dalam sebuah wadah - itu adalah cara untuk memproses dan menyummarisasi jumlah data besar secara efisien.

Perintah MapReduce di MongoDB

Sekarang, mari kita lihat bagaimana kita dapat menggunakan Map Reduce di MongoDB. Struktur dasar operasi Map Reduce di MongoDB tampak 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 bagian demi bagian!

Fungsi Map

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

Misalnya kita memiliki koleksi buku, dan kita ingin menghitung berapa banyak buku yang ditulis oleh setiap pengarang:

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

Fungsi ini mengatakan, "Untuk setiap buku, sebutkan nama pengarang dan nomor 1."

Fungsi Reduce

Fungsi reduce mengambil semua nilai yang diekspresikan untuk kunci tertentu dan menggabungkannya. Itu seperti teman Anda menjumlahkan setiap warna.

Untuk contoh buku kami:

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

Fungsi ini mengatakan, "ambil semua 1 untuk setiap pengarang dan tambahkan mereka."

Opsi

Objek opsi memungkinkan kita untuk menyesuaikan operasi Map Reduce kita:

  • out: Dimana untuk menyimpan hasil
  • query: Saring dokumen masukan
  • sort: Urutkan dokumen masukan
  • limit: Batasi jumlah dokumen untuk 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, 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 kitauraikan 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 dalam 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 Menggunakan Map Reduce

Map Reduce sangat kuat, tetapi itu tidak selalu alat terbaik untuk pekerjaan. Berikut adalah beberapa senario di mana Map Reduce berlimpah:

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

Namun, untuk tugas yang lebih sederhana, pipeline agregasi MongoDB biasanya 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 untuk ditemukan. Ingat, seperti belajar menunggang sepeda, memahami Map Reduce memerlukan latihan. Jangan khawatir untuk mencoba dan membuat kesalahan - itu adalah bagaimana kita belajar!

Sementara kita menutup, ini adalah tabel yang menggabungkan 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 menyimpan hasil { out: "product_sales" }
Query Saring dokumen masukan { query: { price: { $gt: 10 } } }
Sort Urutkan dokumen masukan { sort: { price: 1 } }
Limit Batasi jumlah dokumen untuk diproses { limit: 1000 }

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

Credits: Image by storyset