Farih.co.id
Home Programming Pengurangan Peta vs. Pipa Agregasi di MongoDB

Pengurangan Peta vs. Pipa Agregasi di MongoDB

mapreduce vs aggregation pipeline

MapReduce dan pipeline agregasi adalah dua metode yang dapat Anda gunakan untuk menangani pemrosesan data kompleks di MongoDB. Kerangka kerja agregasi lebih baru dan dikenal karena efisiensinya. Namun beberapa pengembang masih lebih memilih untuk tetap menggunakan MapReduce, yang mereka anggap lebih nyaman.


VIDEO MUO HARI INI

GULIR UNTUK MELANJUTKAN ISI

Praktisnya, Anda ingin memilih salah satu metode kueri kompleks ini karena metode tersebut mencapai tujuan yang sama. Tapi bagaimana cara kerjanya? Apa perbedaannya, dan mana yang harus Anda gunakan?


Bagaimana MapReduce Bekerja di MongoDB

MapReduce di MongoDB memungkinkan Anda menjalankan penghitungan kompleks pada data bervolume besar dan menggabungkan hasilnya menjadi potongan yang lebih komprehensif. Metode MapReduce memiliki dua fungsi: memetakan dan mengurangi.

Saat bekerja dengan MapReduce di MongoDB, Anda akan menentukan peta dan fungsi pengurangan secara terpisah menggunakan JavaScript dan memasukkan masing-masing ke dalam fungsi bawaan. pengurangan peta pertanyaan.

Fungsi map pertama-tama membagi data masuk menjadi pasangan nilai kunci—biasanya berdasarkan pengelompokan yang dipetakan. Di sinilah Anda menentukan bagaimana Anda ingin mengelompokkan data. Fungsi pengurangan kemudian menjalankan penghitungan khusus pada nilai di setiap grup data dan menggabungkan hasilnya ke dalam koleksi terpisah yang disimpan dalam database.

Cara Kerja Pipa Agregasi di MongoDB

Pipa agregasi di MongoDB adalah alternatif yang lebih baik untuk MapReduce. Seperti MapReduce, ini memungkinkan Anda melakukan penghitungan kompleks dan transformasi data langsung di dalam database. Namun agregasi tidak memerlukan penulisan fungsi JavaScript khusus yang dapat mengurangi kinerja kueri.

Sebaliknya, ia menggunakan operator MongoDB bawaan untuk memanipulasi, mengelompokkan, dan menghitung data. Ini kemudian menggabungkan hasil setelah setiap kueri. Dengan demikian, alur agregasi lebih dapat disesuaikan karena Anda dapat menyusun keluaran sesuai keinginan.

Perbedaan Kueri Antara MapReduce dan Agregasi

Asumsikan Anda ingin menghitung total penjualan barang berdasarkan kategori produk. Dalam kasus MapReduce dan agregasi, kategori produk menjadi kunci, sedangkan jumlah item di setiap kategori menjadi nilai terkait.

Ambil beberapa contoh data mentah untuk pernyataan masalah yang dijelaskan, yang terlihat seperti ini:

Contoh data MongoDB

Mari selesaikan skenario masalah ini menggunakan MapReduce dan pipeline agregasi untuk membedakan antara kueri dan metode pemecahan masalah.

Metode MapReduce

Menggunakan Python sebagai bahasa pemrograman dasar, itu pengurangan peta kueri skenario masalah yang dijelaskan sebelumnya terlihat seperti ini:

 import pymongo

client = pymongo.MongoClient(
    "mongodb://localhost/"
)

db = client.my_database

sales = db["sales"]

map_function = """
function() {
    emit(this.Section, this.Sold);
}
"""

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

result = db.command(
    "mapReduce",
    "sales",
    map=map_function,
    reduce=reduce_function,
    out="section_totals"
)

doc = [doc for doc in db.section_totals.find()]
print(doc)

Jika Anda menjalankan ini pada data sampel asli, Anda akan melihat keluaran seperti ini:

 [{
  '_id': 'Adidas',
  'value': 9.0
},{
  '_id': 'Nike',
  'value': 12.0
}]

Perhatikan baik-baik, dan Anda akan melihat bahwa pemroses map dan pengurangan adalah fungsi JavaScript di dalam variabel Python. Kode meneruskan ini ke pengurangan peta kueri, yang menentukan kumpulan keluaran khusus (bagian_total).

Menggunakan Pipa Agregasi

Selain memberikan keluaran yang lebih lancar, kueri alur agregasi juga lebih langsung. Berikut tampilan operasi sebelumnya dengan alur agregasi:

 import pymongo
client = pymongo.MongoClient("mongodb://localhost/")
db = client.funmi
sales = db["sales"]

pipeline = [
    {
        "$group": {
            "_id": "$Section",
            "totalSold": { "$sum": "$Sold" }
        }
    },
    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$totalSold"
        }
    }
]

result = list(sales.aggregate(pipeline))
print(result)

Menjalankan kueri agregasi ini akan memberikan hasil berikut, yang serupa dengan hasil dari pendekatan MapReduce:

 [{
  'Section': 'Nike',
  'TotalSold': 12
},{
  'Section': 'Adidas',
  'TotalSold': 9
}]

Performa dan Kecepatan Kueri

Alur agregasi adalah versi terbaru dari MapReduce. MongoDB merekomendasikan penggunaan jalur agregasi daripada MapReduce, karena jalur agregasi lebih efisien.

Kami mencoba menegaskan klaim ini saat menjalankan kueri di bagian sebelumnya. Dan ketika dijalankan secara berdampingan pada mesin RAM 12 GB, jalur agregasi tampak lebih cepat, rata-rata 0,014 detik selama eksekusi. Mesin yang sama membutuhkan rata-rata 0,058 detik untuk menjalankan kueri MapReduce.

Itu bukan tolok ukur untuk menyimpulkan kinerja mereka, namun tampaknya mendukung rekomendasi MongoDB. Anda mungkin menganggap perbedaan waktu ini tidak signifikan, namun perbedaan ini akan bertambah secara signifikan pada ribuan atau jutaan kueri.

Kelebihan dan Kekurangan MapReduce

Pertimbangkan kelebihan dan kekurangan MapReduce untuk menentukan keunggulannya dalam pemrosesan data.

Kelebihan

  • Ini memberikan lebih banyak fleksibilitas untuk penyesuaian karena Anda menulis peta dan mengurangi fungsi secara terpisah.
  • Anda dapat dengan mudah menyimpan hasilnya ke koleksi MongoDB baru di dalam database.
  • Anda dapat menggunakan MapReduce dalam sistem file terdistribusi seperti Hadoop, yang mudah diintegrasikan dengan MongoDB.
  • Dukungannya terhadap skrip pihak ketiga membuatnya lebih skalabel dan mudah dipelajari dibandingkan pipeline agregasi. Jadi seseorang dengan latar belakang pengembangan JavaScript dapat mengimplementasikan MapReduce.

Kontra

  • Ini memerlukan skrip pihak ketiga; hal ini menyebabkan kinerjanya lebih rendah dibandingkan pipa agregasi.
  • MapReduce mungkin tidak efisien dalam memori, memerlukan beberapa node, terutama ketika menangani data yang terlalu kompleks.
  • Ini tidak cocok untuk pemrosesan data waktu nyata karena pembuatan kueri bisa lambat.

Pro dan Kontra dari Pipa Agregasi

Bagaimana dengan jalur agregasi? Mengingat kekuatan dan kelemahannya memberikan lebih banyak wawasan.

Kelebihan

  • Kuerinya bersifat multitahap, biasanya lebih pendek, lebih ringkas, dan lebih mudah dibaca.
  • Pipeline agregasi lebih efisien, menawarkan peningkatan yang signifikan dibandingkan MapReduce.
  • Ini mendukung operator MongoDB bawaan yang memungkinkan Anda merancang kueri Anda secara fleksibel.
  • Ini mendukung pemrosesan data waktu nyata.
  • Pipeline agregasi mudah diserap ke dalam MongoDB dan tidak memerlukan skrip pihak ketiga.
  • Anda dapat membuat koleksi MongoDB baru untuk keluarannya jika Anda perlu menyimpannya.

Kontra

  • Ini mungkin tidak sefleksibel MapReduce ketika berhadapan dengan struktur data yang lebih kompleks. Karena tidak menggunakan skrip pihak ketiga, ini membatasi Anda pada metode pengumpulan data tertentu.
  • Implementasi dan kurva pembelajarannya dapat menjadi tantangan bagi pengembang yang memiliki sedikit atau tanpa pengalaman dengan MongoDB.

Kapan Anda Harus Menggunakan MapReduce atau Aggregation Pipeline?

Logo tanda tanya dengan kode

Secara umum, yang terbaik adalah mempertimbangkan persyaratan pemrosesan data Anda saat memilih antara MapReduce dan alur agregasi.

Idealnya, jika data Anda lebih kompleks, memerlukan logika dan algoritma tingkat lanjut dalam sistem file terdistribusi, MapReduce bisa berguna. Ini karena Anda dapat dengan mudah menyesuaikan fungsi pengurangan peta dan memasukkannya ke beberapa node. Gunakan MapReduce jika tugas pemrosesan data Anda memerlukan skalabilitas horizontal dibandingkan efisiensi.

Di sisi lain, alur agregasi lebih cocok untuk menghitung data kompleks yang tidak memerlukan logika atau algoritme khusus. Jika data Anda hanya berada di MongoDB, masuk akal untuk menggunakan pipa agregasi karena memiliki banyak operator bawaan.

Pipeline agregasi juga merupakan pilihan terbaik untuk pemrosesan data real-time. Jika persyaratan komputasi Anda memprioritaskan efisiensi dibandingkan faktor lainnya, Anda sebaiknya memilih jalur agregasi.

Jalankan Komputasi Kompleks di MongoDB

Meskipun kedua metode MongoDB adalah kueri pemrosesan data besar, keduanya memiliki banyak perbedaan. Daripada mengambil data sebelum melakukan penghitungan, yang mungkin lebih lambat, kedua metode secara langsung melakukan penghitungan pada data yang disimpan dalam database, sehingga membuat kueri menjadi lebih efisien.

Namun, yang satu mengungguli yang lain dalam hal kinerja, dan tebakan Anda benar. Saluran agregasi mengungguli MapReduce dalam hal efisiensi dan kinerja. Namun meskipun Anda mungkin ingin mengganti MapReduce dengan pipeline agregasi dengan cara apa pun, masih ada area aplikasi tertentu yang membuat penggunaan MapReduce lebih masuk akal.

Pertanyaan Umum

T: Apa Lagi yang Harus Saya Ketahui tentang Alur Agregasi?

Pipa agregasi MongoDB adalah proses multi-langkah yang mencakup pencocokan data, pengelompokan, dan pengurutan.

T: Pertanyaan dan Perintah Apa yang Dapat Saya Gunakan dengan MongoDB?

Meskipun MongoDB adalah database NoSQL, MongoDB masih mendukung banyak operasi yang Anda kenal dari program RDBMS tradisional.

T: Bagaimana Cara Kerja Fungsi Peta dan Pengurangan di JavaScript?

Dalam JavaScript, map dan pengurangan adalah metode kelas Array. Ini adalah fungsi tingkat tinggi yang dapat Anda gunakan untuk membangun fungsi baru untuk kode yang sangat fleksibel dan dapat digunakan kembali.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad