MapReduce je uveljavljen način paraleliziranja podatkovnih poizvedb, toda ali lahko ta alternativa ponudi še več prednosti?

Ključni zaključki

  • MapReduce in agregacijski cevovod sta dve metodi za kompleksno obdelavo podatkov v MongoDB. Ogrodje združevanja je novejše in učinkovitejše.
  • MapReduce vključuje določanje ločenih funkcij preslikave in redukcije z uporabo JavaScripta, medtem ko cevovod združevanja uporablja vgrajene operaterje MongoDB.
  • Cevovod združevanja priporoča MongoDB za boljšo zmogljivost, vendar MapReduce ponuja večjo prilagodljivost in je primeren za porazdeljene datotečne sisteme, kot je Hadoop.

MapReduce in agregacijski cevovod sta dve metodi, ki ju lahko uporabite za obdelavo kompleksnih podatkov v MongoDB. Ogrodje združevanja je novejše in znano po svoji učinkovitosti. Toda nekateri razvijalci se še vedno raje držijo MapReduce, ki se jim zdi bolj udoben.

Praktično želite izbrati eno od teh kompleksnih metod poizvedbe, saj dosegajo isti cilj. Toda kako delujejo? Kako se razlikujejo in katere bi morali uporabiti?

instagram viewer

Kako MapReduce deluje v MongoDB

MapReduce v MongoDB vam omogoča izvajanje zapletenih izračunov na veliki količini podatkov in združevanje rezultatov v bolj obsežen kos. Metoda MapReduce ima dve funkciji: mapiranje in zmanjšanje.

Med delom z MapReduce v MongoDB boste zemljevid in redukcijske funkcije določili ločeno z uporabo JavaScripta in vsako vstavili v vgrajeno mapReduce poizvedbo.

Funkcija preslikave najprej razdeli dohodne podatke v pare ključ-vrednost – običajno na podlagi preslikanega združevanja. Tukaj določite, kako želite združiti podatke. Funkcija redukcije nato izvede izračune po meri za vrednosti v vsaki podatkovni skupini in združi rezultat v ločeno zbirko, shranjeno v bazi podatkov.

Kako deluje agregacijski cevovod v MongoDB

Cevovod združevanja v MongoDB je izboljšana alternativa MapReduce. Tako kot MapReduce vam omogoča izvajanje kompleksnih izračunov in transformacij podatkov neposredno v bazi podatkov. Toda združevanje ne zahteva pisanja namenskih funkcij JavaScript, ki lahko zmanjšajo zmogljivost poizvedbe.

Namesto tega uporablja vgrajene operaterje MongoDB za manipulacijo, združevanje in računanje podatkov. Nato združi rezultate po vsaki poizvedbi. Tako je cevovod združevanja bolj prilagodljiv, saj lahko strukturirate izhod, kot želite.

Kako se poizvedbe razlikujejo med MapReduce in Aggregation

Recimo, da želite izračunati skupno prodajo artiklov na podlagi kategorij izdelkov. V primeru MapReduce in združevanja kategorije izdelkov postanejo ključi, medtem ko vsote elementov pod vsako kategorijo postanejo ustrezne vrednosti.

Vzemite nekaj primerov neobdelanih podatkov za opisano izjavo o problemu, ki je videti takole:

Rešimo ta problemski scenarij z uporabo MapReduce in združevalnega cevovoda za razlikovanje med njihovimi poizvedbami in metodami reševanja problemov.

Metoda MapReduce

Z uporabo Pythona kot osnovnega programskega jezika je mapReduce poizvedba prej opisanega scenarija težave izgleda takole:

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)

Če to zaženete z izvirnimi vzorčnimi podatki, boste videli rezultat, kot je ta:

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

Poglejte natančno in videli bi, da sta procesorja map in redukcija funkcije JavaScript znotraj spremenljivk Python. Koda jih posreduje v mapReduce poizvedba, ki podaja namensko izhodno zbirko (oddelek_totals).

Uporaba cevovoda združevanja

Poleg zagotavljanja bolj gladkega izhoda je poizvedba cevovoda združevanja bolj neposredna. Tukaj je videti prejšnja operacija s cevovodom združevanja:

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)

Izvajanje te poizvedbe združevanja bo dalo naslednje rezultate, ki so podobni rezultatom iz pristopa MapReduce:

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

Učinkovitost in hitrost poizvedbe

Cevovod združevanja je posodobljena različica MapReduce. MongoDB priporoča uporabo cevovoda združevanja namesto MapReduce, saj je prvi bolj učinkovit.

To trditev smo poskušali uveljaviti med izvajanjem poizvedb v prejšnjem razdelku. In ko se izvaja vzporedno na stroju z 12 GB RAM-a, se zdi, da je cevovod združevanja hitrejši, v povprečju 0,014 sekunde med izvajanjem. Isti stroj je v povprečju potreboval 0,058 sekunde, da je izvedel poizvedbo MapReduce.

To ni merilo za sklepanje o njihovi uspešnosti, vendar se zdi, da podpira priporočilo MongoDB. Morda se vam zdi ta časovna razlika nepomembna, vendar se bo precej povečala na tisoče ali milijone poizvedb.

Prednosti in slabosti MapReduce

Razmislite o dobrih in slabih straneh MapReduce, da ugotovite, kje je najboljši pri obdelavi podatkov.

Prednosti

  • Omogoča večjo prilagodljivost pri prilagajanju, saj zemljevid in zmanjšane funkcije pišete ločeno.
  • Izhod lahko enostavno shranite v novo zbirko MongoDB znotraj baze podatkov.
  • Lahko uporabiš MapReduce v porazdeljenih datotečnih sistemih kot Hadoop, ki se enostavno integrira z MongoDB.
  • Njegova podpora za skriptiranje tretjih oseb je bolj razširljiva in preprosta za učenje kot cevovod združevanja. Tako lahko nekdo z razvojnim ozadjem JavaScript implementira MapReduce.

Slabosti

  • Zahteva skripte tretjih oseb; to prispeva k njegovi nižji zmogljivosti kot cevovod združevanja.
  • MapReduce je lahko pomnilniško neučinkovit, saj zahteva več vozlišč, zlasti pri delu s preveč zapletenimi podatki.
  • Ni primeren za obdelavo podatkov v realnem času, ker je poizvedovanje lahko počasno.

Prednosti in slabosti agregacijskega cevovoda

Kaj pa agregacijski cevovod? Upoštevanje njegovih prednosti in slabosti zagotavlja boljši vpogled.

Prednosti

  • Poizvedba je večstopenjska, običajno krajša, bolj jedrnata in bolj berljiva.
  • Cevovod združevanja je učinkovitejši in ponuja znatno izboljšavo v primerjavi z MapReduce.
  • Podpira vgrajene operaterje MongoDB, ki vam omogočajo prilagodljivo oblikovanje poizvedbe.
  • Podpira obdelavo podatkov v realnem času.
  • Združevalni cevovod je enostavno zaužiti v MongoDB in ne zahteva skriptiranja tretjih oseb.
  • Ti lahko ustvarite novo zbirko MongoDB za izhode, če jih morate shraniti.

Slabosti

  • Pri obravnavi kompleksnejših podatkovnih struktur morda ni tako prilagodljiv kot MapReduce. Ker ne uporablja skriptov tretjih oseb, vas omejuje na določeno metodo združevanja podatkov.
  • Njegova implementacija in krivulja učenja sta lahko izziv za razvijalce z malo ali nič izkušenj z MongoDB.

Kdaj uporabiti MapReduce ali agregacijski cevovod?

Na splošno je najbolje, da pri izbiri med MapReduce in cevovodom združevanja upoštevate svoje zahteve glede obdelave podatkov.

V idealnem primeru, če so vaši podatki bolj zapleteni in zahtevajo napredno logiko in algoritme v porazdeljenem datotečnem sistemu, vam lahko MapReduce pride prav. To je zato, ker lahko preprosto prilagodite funkcije za zmanjšanje zemljevidov in jih vstavite v več vozlišč. Izberite MapReduce, če vaša naloga obdelave podatkov zahteva vodoravno razširljivost nad učinkovitostjo.

Po drugi strani pa je agregacijski cevovod bolj primeren za računanje kompleksnih podatkov, ki ne zahtevajo prilagojene logike ali algoritmov. Če se vaši podatki nahajajo samo v MongoDB, je smiselno uporabiti cevovod združevanja, saj ima veliko vgrajenih operaterjev.

Cevovod združevanja je najboljši tudi za obdelavo podatkov v realnem času. Če vaša računska zahteva daje prednost učinkovitosti pred drugimi dejavniki, se odločite za cevovod združevanja.

Zaženite kompleksne izračune v MongoDB

Čeprav sta obe metodi MongoDB poizvedbi za obdelavo velikih podatkov, imata veliko razlik. Namesto pridobivanja podatkov pred izvedbo izračunov, ki so lahko počasnejši, obe metodi neposredno izvajata izračune na podatkih, shranjenih v bazi podatkov, zaradi česar so poizvedbe učinkovitejše.

Vendar eno nadomešča drugo v uspešnosti in prav ste uganili. Cevovod združevanja prekaša MapReduce v učinkovitosti in zmogljivosti. Čeprav bi morda želeli za vsako ceno zamenjati MapReduce s cevovodom združevanja, še vedno obstajajo posebna področja uporabe, kjer je uporaba MapReduce bolj smiselna.