MapReduce ir iedibināts datu vaicājumu paralēlizēšanas veids, taču vai šī alternatīva var piedāvāt vēl vairāk priekšrocību?
Key Takeaways
- MapReduce un apkopošanas cauruļvads ir divas sarežģītas datu apstrādes metodes MongoDB. Apkopošanas sistēma ir jaunāka un efektīvāka.
- MapReduce ietver atsevišķu kartes un samazināšanas funkciju norādīšanu, izmantojot JavaScript, savukārt apkopošanas konveijerā tiek izmantoti iebūvēti MongoDB operatori.
- Apkopošanas cauruļvadu iesaka MongoDB, lai nodrošinātu labāku veiktspēju, taču MapReduce piedāvā lielāku elastību un ir piemērots izplatītām failu sistēmām, piemēram, Hadoop.
MapReduce un apkopošanas konveijers ir divas metodes, kuras varat izmantot, lai apstrādātu sarežģītu datu apstrādi MongoDB. Apkopošanas sistēma ir jaunāka un pazīstama ar savu efektivitāti. Taču daži izstrādātāji joprojām izvēlas pieturēties pie MapReduce, ko viņi uzskata par ērtāku.
Praktiski vēlaties izvēlēties vienu no šīm sarežģītajām vaicājumu metodēm, jo tās sasniedz vienu un to pašu mērķi. Bet kā viņi strādā? Kā tās atšķiras un kuras jums vajadzētu izmantot?
Kā MapReduce darbojas MongoDB
MapReduce MongoDB ļauj veikt sarežģītus aprēķinus lielam datu apjomam un apkopot rezultātu visaptverošākā daļā. MapReduce metodei ir divas funkcijas: kartēšana un samazināšana.
Strādājot ar MapReduce MongoDB, jūs atsevišķi norādāt karti un samazināšanas funkcijas, izmantojot JavaScript, un katras ievietojat iebūvētajā karteSamazināt vaicājums.
Kartes funkcija vispirms sadala ienākošos datus atslēgu un vērtību pāros, parasti pamatojoties uz kartētu grupēšanu. Šeit jūs norādāt, kā vēlaties grupēt datus. Pēc tam samazināšanas funkcija veic pielāgotus aprēķinus vērtībām katrā datu grupā un apkopo rezultātu atsevišķā kolekcijā, kas tiek glabāta datu bāzē.
Kā MongoDB darbojas apkopošanas cauruļvads
MongoDB apkopošanas cauruļvads ir uzlabota MapReduce alternatīva. Tāpat kā MapReduce, tas ļauj veikt sarežģītus aprēķinus un datu transformācijas tieši datu bāzē. Taču apkopošanai nav jāraksta īpašas JavaScript funkcijas, kas var samazināt vaicājuma veiktspēju.
Tā vietā tas izmanto iebūvētos MongoDB operatorus, lai manipulētu, grupētu un aprēķinātu datus. Pēc katra vaicājuma tiek apkopoti rezultāti. Tādējādi apkopošanas konveijera ir vairāk pielāgojama, jo jūs varat strukturēt izvadi, kā vēlaties.
Kā vaicājumi atšķiras starp MapReduce un Aggregation
Pieņemsim, ka vēlaties aprēķināt kopējo preču pārdošanas apjomu, pamatojoties uz produktu kategorijām. MapReduce un apkopošanas gadījumā produktu kategorijas kļūst par atslēgām, savukārt katras kategorijas vienumu summas kļūst par atbilstošajām vērtībām.
Aprakstītajam problēmas paziņojumam izmantojiet neapstrādātu datu piemēru, kas izskatās šādi:
Atrisināsim šo problēmas scenāriju, izmantojot MapReduce un apkopošanas konveijeru, lai atšķirtu to vaicājumus un problēmu risināšanas metodes.
MapReduce metode
Izmantojot Python kā pamata programmēšanas valodu, karteSamazināt iepriekš aprakstītā problēmas scenārija vaicājums izskatās šādi:
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)
Ja izpildīsit to ar sākotnējiem parauga datiem, jūs redzēsit šādu izvadi:
[{
'_id': 'Adidas',
'value': 9.0
},{
'_id': 'Nike',
'value': 12.0
}]
Paskatieties uzmanīgi, un jums vajadzētu redzēt, ka karte un samazināt procesori ir JavaScript funkcijas Python mainīgo iekšpusē. Kods tos nodod karteSamazināt vaicājums, kas norāda īpašu izvades kolekciju (sadaļa_kopējie).
Agregācijas cauruļvada izmantošana
Papildus vienmērīgākai izvadei, apkopošanas konveijera vaicājums ir tiešāks. Lūk, kā izskatās iepriekšējā darbība ar apkopošanas cauruļvadu:
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)
Palaižot šo apkopošanas vaicājumu, tiks iegūti šādi rezultāti, kas ir līdzīgi MapReduce pieejas rezultātiem:
[{
'Section': 'Nike',
'TotalSold': 12
},{
'Section': 'Adidas',
'TotalSold': 9
}]
Vaicājuma veiktspēja un ātrums
Apkopošanas konveijera ir atjaunināta MapReduce versija. MongoDB iesaka MapReduce vietā izmantot apkopošanas cauruļvadu, jo pirmais ir efektīvāks.
Mēs mēģinājām apstiprināt šo apgalvojumu, izpildot vaicājumus iepriekšējā sadaļā. Un, izpildot blakus 12 GB RAM iekārtā, apkopošanas konveijers šķita ātrāks, izpildes laikā vidēji 0,014 sekundes. Vienai un tai pašai mašīnai bija nepieciešamas vidēji 0,058 sekundes, lai izpildītu MapReduce vaicājumu.
Tas nav mēraukla, lai izdarītu secinājumus par viņu sniegumu, bet šķiet, ka tas atbalsta MongoDB ieteikumu. Jūs varētu uzskatīt, ka šī laika starpība ir nenozīmīga, taču tā ievērojami palielināsies tūkstošiem vai miljonu vaicājumu.
MapReduce plusi un mīnusi
Apsveriet MapReduce priekšrocības un trūkumus, lai noteiktu, kur tas ir izcils datu apstrādes jomā.
Pros
- Tas nodrošina lielāku pielāgošanas elastību, jo jūs atsevišķi rakstāt karti un samazinat funkcijas.
- Jūs varat viegli saglabāt izvadi jaunā MongoDB kolekcijā datu bāzē.
- Tu vari izmantot MapReduce izplatītajās failu sistēmās piemēram, Hadoop, kas viegli integrējas ar MongoDB.
- Tā atbalsts trešās puses skriptēšanai padara to mērogojamāku un vieglāk apgūstamu nekā apkopošanas konveijera. Tātad kāds ar JavaScript izstrādes pieredzi var ieviest MapReduce.
Mīnusi
- Tam nepieciešama trešās puses skriptēšana; tas veicina tā zemāku veiktspēju nekā apkopošanas konveijeram.
- MapReduce var būt neefektīva atmiņai, un tam ir nepieciešami vairāki mezgli, īpaši, ja tiek apstrādāti pārāk sarežģīti dati.
- Tas nav piemērots datu apstrādei reāllaikā, jo vaicājumi var būt lēni.
Apkopošanas cauruļvada plusi un mīnusi
Kā ar apkopošanas cauruļvadu? Apsverot tās stiprās un vājās puses, tiek sniegts plašāks ieskats.
Pros
- Vaicājums ir daudzpakāpju, parasti īsāks, kodolīgāks un lasāmāks.
- Apkopošanas cauruļvads ir efektīvāks, piedāvājot ievērojamus uzlabojumus salīdzinājumā ar MapReduce.
- Tā atbalsta iebūvētos MongoDB operatorus, kas ļauj elastīgi izstrādāt vaicājumu.
- Tā atbalsta reāllaika datu apstrādi.
- Apkopošanas konveijers ir viegli pārņemams MongoDB, un tam nav nepieciešama trešās puses skriptēšana.
- Jūs varat izveidot jaunu MongoDB kolekciju izvadēm, ja tās ir jāsaglabā.
Mīnusi
- Tas var nebūt tik elastīgs kā MapReduce, strādājot ar sarežģītākām datu struktūrām. Tā kā tajā netiek izmantota trešās puses skriptēšana, tā ierobežo noteiktu datu apkopošanas metodi.
- Tās ieviešana un mācīšanās līkne var būt sarežģīta izstrādātājiem, kuriem ir maza pieredze vai nav nekādas pieredzes ar MongoDB.
Kad jums vajadzētu izmantot MapReduce vai Aggregation Pipeline?
Parasti vislabāk ir ņemt vērā datu apstrādes prasības, izvēloties starp MapReduce un apkopošanas konveijeru.
Ideālā gadījumā, ja jūsu dati ir sarežģītāki un tiem nepieciešama uzlabota loģika un algoritmi sadalītā failu sistēmā, MapReduce var noderēt. Tas ir tāpēc, ka varat viegli pielāgot kartes samazināšanas funkcijas un ievadīt tās vairākos mezglos. Izmantojiet MapReduce, ja jūsu datu apstrādes uzdevums prasa horizontālu mērogojamību, nevis efektivitāti.
No otras puses, apkopošanas konveijers ir vairāk piemērots sarežģītu datu aprēķināšanai, kam nav nepieciešama pielāgota loģika vai algoritmi. Ja jūsu dati atrodas tikai MongoDB, ir lietderīgi izmantot apkopošanas konveijeru, jo tajā ir daudz iebūvētu operatoru.
Apkopošanas konveijers ir arī vislabākais reāllaika datu apstrādei. Ja jūsu aprēķinu prasībās efektivitāte ir prioritāte salīdzinājumā ar citiem faktoriem, vēlaties izvēlēties apkopošanas konveijeru.
Palaidiet sarežģītus aprēķinus pakalpojumā MongoDB
Lai gan abas MongoDB metodes ir lieli datu apstrādes vaicājumi, tām ir daudz atšķirību. Tā vietā, lai izgūtu datus pirms aprēķinu veikšanas, kas var būt lēnāk, abas metodes tieši veic datu bāzē saglabāto datu aprēķinus, padarot vaicājumus efektīvākus.
Tomēr viens pārspēj otru veiktspējā, un jūs uzminējāt pareizi. Apkopošanas cauruļvads pārspēj MapReduce efektivitāti un veiktspēju. Taču, lai gan jūs varētu par katru cenu aizstāt MapReduce ar apkopošanas konveijeru, joprojām ir noteiktas pielietojuma jomas, kurās MapReduce izmantošana ir saprātīgāka.