MapReduce on väljakujunenud viis andmepäringute paralleelseerimiseks, kuid kas see alternatiiv võib pakkuda veelgi rohkem eeliseid?

Võtmed kaasavõtmiseks

  • MapReduce ja koondamiskonveier on kaks meetodit keerukaks andmetöötluseks MongoDB-s. Koondamisraamistik on uuem ja tõhusam.
  • MapReduce hõlmab eraldi kaardi- ja vähendamise funktsioonide määramist JavaScripti abil, samas kui koondamiskonveier kasutab sisseehitatud MongoDB operaatoreid.
  • MongoDB soovitab parema jõudluse saavutamiseks koondamiskonveierit, kuid MapReduce pakub rohkem paindlikkust ja sobib hajutatud failisüsteemidele, nagu Hadoop.

MapReduce ja koondamiskonveier on kaks meetodit, mida saate kasutada keeruka andmetöötluse lahendamiseks MongoDB-s. Koondamisraamistik on uuem ja tuntud oma tõhususe poolest. Kuid mõned arendajad eelistavad siiski jääda MapReduce'i juurde, mida nad peavad mugavamaks.

Praktiliselt soovite valida ühe neist keerukatest päringumeetoditest, kuna need saavutavad sama eesmärgi. Aga kuidas need töötavad? Mille poolest need erinevad ja mida peaksite kasutama?

instagram viewer

Kuidas MapReduce MongoDB-s töötab

MapReduce MongoDB-s võimaldab teil teha keerulisi arvutusi suurel hulgal andmemahul ja koondada tulemused põhjalikumaks tükiks. MapReduce meetodil on kaks funktsiooni: kaardistamine ja vähendamine.

MongoDB-s MapReduce'iga töötades määrate kaardi ja vähendamise funktsioonid JavaScripti abil eraldi ja sisestate mõlemad sisseehitatud kaart Vähenda päring.

Kaardifunktsioon jagab esmalt sissetulevad andmed võtme-väärtuste paarideks – tavaliselt kaardistatud rühmitamise põhjal. Siin saate määrata, kuidas soovite andmeid rühmitada. Seejärel käivitab vähendamise funktsioon kohandatud arvutused iga andmerühma väärtuste kohta ja koondab tulemuse andmebaasi salvestatud eraldi kogusse.

Kuidas koondamistoru MongoDB-s töötab

MongoDB koondamiskonveier on MapReduce'i täiustatud alternatiiv. Nagu MapReduce, võimaldab see teha keerulisi arvutusi ja andmete teisendusi otse andmebaasis. Kuid koondamine ei nõua spetsiaalsete JavaScripti funktsioonide kirjutamist, mis võivad päringu jõudlust vähendada.

Selle asemel kasutab see andmete manipuleerimiseks, rühmitamiseks ja arvutamiseks sisseehitatud MongoDB operaatoreid. Seejärel koondab see tulemused pärast iga päringut. Seega on koondamiskonveier paremini kohandatav, kuna saate väljundit struktureerida nii, nagu soovite.

Kuidas päringud MapReduce'i ja Aggregation'i vahel erinevad?

Oletame, et soovite arvutada kaupade kogumüügi tootekategooriate alusel. MapReduce'i ja koondamise korral saavad võtmeteks tootekategooriad, vastavateks väärtusteks aga iga kategooria all olevate üksuste summad.

Võtke kirjeldatud probleemiavalduse algandmete näide, mis näeb välja järgmine:

Lahendame selle probleemistsenaariumi MapReduce'i ja koondamiskonveieri abil, et eristada nende päringuid ja probleemilahendusmeetodeid.

MapReduce meetod

Kasutades põhiprogrammeerimiskeelena Pythonit, kaart Vähenda eelnevalt kirjeldatud probleemistsenaariumi päring näeb välja selline:

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)

Kui käivitate selle algsete näidisandmetega, näete sellist väljundit:

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

Vaadake tähelepanelikult ja peaksite nägema, et kaardi ja vähendamise protsessorid on JavaScripti funktsioonid Pythoni muutujate sees. Kood edastab need kaart Vähenda päring, mis määrab spetsiaalse väljundkogu (jaotis_kokku).

Koondamistoru kasutamine

Lisaks sujuvamale väljundile on koondamiskonveieri päring ka otsesem. Eelmine toiming koondamiskonveieriga näeb välja järgmine:

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)

Selle koondamispäringu käitamine annab järgmised tulemused, mis on sarnased MapReduce'i lähenemisviisi tulemustega.

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

Päringu jõudlus ja kiirus

Koondamiskonveier on MapReduce'i värskendatud versioon. MongoDB soovitab kasutada MapReduce'i asemel koondamiskonveieri, kuna esimene on tõhusam.

Püüdsime seda väidet kinnitada eelmises jaotises päringute käitamise ajal. Ja kui seda 12 GB RAM-iga masinas kõrvuti käivitati, tundus liitmiskonveier olevat kiirem, keskmiselt 0,014 sekundit täitmise ajal. Samal masinal kulus MapReduce päringu käivitamiseks keskmiselt 0,058 sekundit.

See ei ole mõõdupuu nende esinemiste kohta järelduste tegemiseks, kuid näib, et see toetab MongoDB soovitust. Te võite seda ajavahet pidada ebaoluliseks, kuid see lisandub tuhandete või miljonite päringute puhul märkimisväärselt.

MapReduce'i plussid ja miinused

Kaaluge MapReduce'i plusse ja miinuseid, et teha kindlaks, kus see andmetöötluses silmapaistev on.

Plussid

  • See annab kohandamiseks suurema paindlikkuse, kuna kirjutate kaardi ja vähendate funktsioone eraldi.
  • Saate väljundi hõlpsalt andmebaasis uude MongoDB kogusse salvestada.
  • Sa võid kasutada MapReduce hajutatud failisüsteemides nagu Hadoop, mis integreerub hõlpsalt MongoDB-ga.
  • Selle tugi kolmanda osapoole skriptimisele muudab selle skaleeritavamaks ja hõlpsamini õpitavaks kui koondamiskonveieri. Nii et keegi, kellel on JavaScripti arendamise taust, saab MapReduce'i rakendada.

Miinused

  • See nõuab kolmanda osapoole skriptimist; see aitab kaasa selle madalamale jõudlusele kui koondamiskonveieril.
  • MapReduce võib olla mälu ebatõhus, nõudes mitut sõlme, eriti kui tegemist on liiga keerukate andmetega.
  • See ei sobi reaalajas andmetöötluseks, kuna päringu tegemine võib olla aeglane.

Koondamistorustiku plussid ja miinused

Kuidas on lood koondamistorustikuga? Selle tugevate ja nõrkade külgede arvestamine annab parema ülevaate.

Plussid

  • Päring on mitmeastmeline, tavaliselt lühem, ülevaatlikum ja paremini loetav.
  • Koondamistoru on tõhusam, pakkudes MapReduce'iga võrreldes märkimisväärset edu.
  • See toetab sisseehitatud MongoDB operaatoreid, mis võimaldavad teil oma päringut paindlikult kujundada.
  • See toetab reaalajas andmetöötlust.
  • Koondamiskonveier on hõlpsasti MongoDB-sse neelatav ja ei vaja kolmanda osapoole skriptimist.
  • Sa saad looge uus MongoDB kollektsioon väljundite jaoks, kui peate need salvestama.

Miinused

  • Keerulisemate andmestruktuuridega tegelemisel ei pruugi see olla nii paindlik kui MapReduce. Kuna see ei kasuta kolmanda osapoole skripte, piirab see andmete koondamise konkreetse meetodi.
  • Selle rakendamine ja õppimiskõver võib olla keeruline arendajatele, kellel on MongoDB-ga vähe või puuduvad kogemused.

Millal peaksite kasutama MapReduce'i või Aggregation Pipeline'i?

Üldiselt on MapReduce'i ja koondamiskonveieri vahel valimisel kõige parem arvestada andmetöötlusnõuetega.

Ideaaljuhul, kui teie andmed on keerukamad ja vajavad hajutatud failisüsteemis täiustatud loogikat ja algoritme, võib MapReduce olla kasulik. Seda seetõttu, et saate hõlpsalt kohandada kaardi vähendamise funktsioone ja sisestada need mitmesse sõlme. Valige MapReduce, kui teie andmetöötlusülesanne nõuab tõhususe asemel horisontaalset mastaapsust.

Teisest küljest on koondamiskonveier sobivam keerukate andmete arvutamiseks, mis ei vaja kohandatud loogikat ega algoritme. Kui teie andmed asuvad ainult MongoDB-s, on mõttekas kasutada koondamiskonveieri, kuna sellel on palju sisseehitatud operaatoreid.

Koondamiskonveier sobib kõige paremini ka andmete reaalajas töötlemiseks. Kui teie arvutusnõuded eelistavad tõhusust muude tegurite ees, soovite valida koondamiskonveieri.

Käivitage keerulised arvutused MongoDB-s

Kuigi mõlemad MongoDB meetodid on suured andmetöötluspäringud, on neil palju erinevusi. Selle asemel, et enne arvutuste tegemist andmeid hankida, mis võib olla aeglasem, teostavad mõlemad meetodid otse andmebaasi salvestatud andmete põhjal arvutusi, muutes päringud tõhusamaks.

Kuid üks asendab teise jõudluses ja arvasite õigesti. Koondamistoru ületab MapReduce'i tõhususe ja jõudluse poolest. Kuigi võiksite MapReduce'i iga hinna eest asendada koondamiskonveieriga, on siiski konkreetseid rakendusvaldkondi, kus MapReduce'i kasutamine on mõttekam.