Το MapReduce είναι ένας καθιερωμένος τρόπος παραλληλισμού ερωτημάτων δεδομένων, αλλά μπορεί αυτή η εναλλακτική να προσφέρει ακόμη περισσότερα οφέλη;

Βασικά Takeaways

  • Το MapReduce και ο αγωγός συγκέντρωσης είναι δύο μέθοδοι για πολύπλοκη επεξεργασία δεδομένων στο MongoDB. Το πλαίσιο συγκέντρωσης είναι νεότερο και πιο αποτελεσματικό.
  • Το MapReduce περιλαμβάνει τον καθορισμό ξεχωριστών συναρτήσεων χάρτη και μείωσης χρησιμοποιώντας JavaScript, ενώ ο αγωγός συγκέντρωσης χρησιμοποιεί ενσωματωμένους τελεστές MongoDB.
  • Ο αγωγός συγκέντρωσης συνιστάται από την MongoDB για καλύτερη απόδοση, αλλά το MapReduce προσφέρει μεγαλύτερη ευελιξία και είναι κατάλληλο για κατανεμημένα συστήματα αρχείων όπως το Hadoop.

Το MapReduce και η διοχέτευση συγκέντρωσης είναι οι δύο μέθοδοι που μπορείτε να χρησιμοποιήσετε για να αντιμετωπίσετε πολύπλοκη επεξεργασία δεδομένων στο MongoDB. Το πλαίσιο συγκέντρωσης είναι νεότερο και γνωστό για την αποτελεσματικότητά του. Ωστόσο, ορισμένοι προγραμματιστές εξακολουθούν να προτιμούν να τηρούν το MapReduce, το οποίο θεωρούν πιο άνετο.

instagram viewer

Πρακτικά, θέλετε να επιλέξετε μία από αυτές τις πολύπλοκες μεθόδους αναζήτησης, καθώς επιτυγχάνουν τον ίδιο στόχο. Πώς λειτουργούν όμως; Πώς διαφέρουν και ποια πρέπει να χρησιμοποιήσετε;

Πώς λειτουργεί το MapReduce στο MongoDB

Το MapReduce στο MongoDB σάς επιτρέπει να εκτελείτε πολύπλοκους υπολογισμούς σε μεγάλο όγκο δεδομένων και να συγκεντρώνετε το αποτέλεσμα σε ένα πιο ολοκληρωμένο κομμάτι. Η μέθοδος MapReduce διαθέτει δύο λειτουργίες: χαρτογράφηση και μείωση.

Ενώ εργάζεστε με το MapReduce στο MongoDB, θα καθορίσετε τον χάρτη και τις λειτουργίες μείωσης ξεχωριστά χρησιμοποιώντας JavaScript και θα εισαγάγετε το καθένα στο ενσωματωμένο ΜΕΙΩΣΗ ΧΑΡΤΗ ερώτηση.

Η συνάρτηση χάρτη πρώτα διαχωρίζει τα εισερχόμενα δεδομένα σε ζεύγη κλειδιών-τιμών—συνήθως με βάση την αντιστοιχισμένη ομαδοποίηση. Εδώ καθορίζετε πώς θέλετε να ομαδοποιήσετε τα δεδομένα. Στη συνέχεια, η συνάρτηση μείωσης εκτελεί προσαρμοσμένους υπολογισμούς για τις τιμές σε κάθε ομάδα δεδομένων και συγκεντρώνει το αποτέλεσμα σε μια ξεχωριστή συλλογή που είναι αποθηκευμένη στη βάση δεδομένων.

Πώς λειτουργεί ο αγωγός συγκέντρωσης στο MongoDB

Ο αγωγός συγκέντρωσης στο MongoDB είναι μια βελτιωμένη εναλλακτική λύση στο MapReduce. Όπως το MapReduce, σας επιτρέπει να εκτελείτε πολύπλοκους υπολογισμούς και μετασχηματισμούς δεδομένων απευθείας μέσα στη βάση δεδομένων. Ωστόσο, η συγκέντρωση δεν απαιτεί τη σύνταξη αποκλειστικών λειτουργιών JavaScript που μπορούν να μειώσουν την απόδοση του ερωτήματος.

Αντίθετα, χρησιμοποιεί ενσωματωμένους τελεστές MongoDB για χειρισμό, ομαδοποίηση και υπολογισμό δεδομένων. Στη συνέχεια συγκεντρώνει τα αποτελέσματα μετά από κάθε ερώτημα. Έτσι, ο αγωγός συγκέντρωσης είναι πιο προσαρμόσιμος αφού μπορείτε να δομήσετε την έξοδο όπως θέλετε.

Πώς διαφέρουν τα ερωτήματα μεταξύ MapReduce και Aggregation

Ας υποθέσουμε ότι θέλετε να υπολογίσετε τις συνολικές πωλήσεις των ειδών με βάση τις κατηγορίες προϊόντων. Στην περίπτωση του MapReduce και της συνάθροισης, οι κατηγορίες προϊόντων γίνονται τα κλειδιά, ενώ τα αθροίσματα των στοιχείων σε κάθε κατηγορία γίνονται οι αντίστοιχες τιμές.

Πάρτε μερικά παραδείγματα ακατέργαστων δεδομένων για την περιγραφόμενη δήλωση προβλήματος, που μοιάζει με αυτό:

Ας λύσουμε αυτό το σενάριο προβλήματος χρησιμοποιώντας το MapReduce και μια διοχέτευση συγκέντρωσης για να διαφοροποιήσουμε τα ερωτήματά τους και τις μεθόδους επίλυσης προβλημάτων.

Η μέθοδος MapReduce

Χρησιμοποιώντας την Python ως βασική γλώσσα προγραμματισμού, η ΜΕΙΩΣΗ ΧΑΡΤΗ το ερώτημα του σεναρίου προβλήματος που περιγράφηκε προηγουμένως μοιάζει με αυτό:

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)

Εάν το εκτελέσετε σε σχέση με τα αρχικά δείγματα δεδομένων, θα δείτε την έξοδο ως εξής:

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

Κοιτάξτε προσεκτικά, και θα πρέπει να δείτε ότι οι επεξεργαστές χάρτη και μείωσης είναι Λειτουργίες JavaScript μέσα σε μεταβλητές Python. Ο κώδικας τα περνάει στο ΜΕΙΩΣΗ ΧΑΡΤΗ ερώτημα, το οποίο καθορίζει μια αποκλειστική συλλογή εξόδων (ενότητα_σύνολο).

Χρήση αγωγού συγκέντρωσης

Εκτός από την παροχή ομαλότερης απόδοσης, το ερώτημα του αγωγού συγκέντρωσης είναι πιο άμεσο. Δείτε πώς φαίνεται η προηγούμενη λειτουργία με τον αγωγό συγκέντρωσης:

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)

Η εκτέλεση αυτού του ερωτήματος συγκέντρωσης θα δώσει τα ακόλουθα αποτελέσματα, τα οποία είναι παρόμοια με τα αποτελέσματα από την προσέγγιση MapReduce:

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

Απόδοση και ταχύτητα ερωτήματος

Ο αγωγός συγκέντρωσης είναι μια ενημερωμένη έκδοση του MapReduce. Η MongoDB συνιστά τη χρήση του αγωγού συγκέντρωσης αντί του MapReduce, καθώς το πρώτο είναι πιο αποτελεσματικό.

Προσπαθήσαμε να διεκδικήσουμε αυτόν τον ισχυρισμό κατά την εκτέλεση των ερωτημάτων στην προηγούμενη ενότητα. Και όταν εκτελούνταν δίπλα-δίπλα σε ένα μηχάνημα RAM 12 GB, ο αγωγός συγκέντρωσης φαινόταν ταχύτερος, με μέσο όρο 0,014 δευτερόλεπτα κατά την εκτέλεση. Το ίδιο μηχάνημα χρειάστηκε κατά μέσο όρο 0,058 δευτερόλεπτα για να εκτελέσει το ερώτημα MapReduce.

Αυτό δεν αποτελεί μέτρο για να ολοκληρώσουμε τις επιδόσεις τους, αλλά φαίνεται να υποστηρίζει τη σύσταση της MongoDB. Μπορεί να θεωρήσετε αυτή τη διαφορά ώρας ασήμαντη, αλλά θα αθροιστεί σημαντικά σε χιλιάδες ή εκατομμύρια ερωτήματα.

Τα υπέρ και τα κατά του MapReduce

Εξετάστε τα θετικά και τα αρνητικά του MapReduce για να προσδιορίσετε πού υπερέχει στην επεξεργασία δεδομένων.

Πλεονεκτήματα

  • Παρέχει μεγαλύτερη ευελιξία για προσαρμογή, αφού γράφετε τον χάρτη και μειώνετε τις λειτουργίες ξεχωριστά.
  • Μπορείτε εύκολα να αποθηκεύσετε τα αποτελέσματα σε μια νέα συλλογή MongoDB μέσα στη βάση δεδομένων.
  • Μπορείς να χρησιμοποιήσεις MapReduce σε κατανεμημένα συστήματα αρχείων όπως το Hadoop, το οποίο ενσωματώνεται εύκολα με το MongoDB.
  • Η υποστήριξή του για δέσμες ενεργειών τρίτου μέρους το καθιστά πιο κλιμακωτό και εύκολο στην εκμάθηση από τη διοχέτευση συγκέντρωσης. Έτσι, κάποιος με ιστορικό ανάπτυξης JavaScript μπορεί να εφαρμόσει το MapReduce.

Μειονεκτήματα

  • Απαιτεί σενάρια τρίτων. Αυτό συμβάλλει στη χαμηλότερη απόδοσή του από τον αγωγό συγκέντρωσης.
  • Το MapReduce μπορεί να είναι αναποτελεσματικό στη μνήμη, απαιτώντας αρκετούς κόμβους, ειδικά όταν έχουμε να κάνουμε με υπερβολικά πολύπλοκα δεδομένα.
  • Δεν είναι κατάλληλο για επεξεργασία δεδομένων σε πραγματικό χρόνο, καθώς το ερώτημα μπορεί να είναι αργό.

Πλεονεκτήματα και μειονεκτήματα του αγωγού συγκέντρωσης

Τι θα λέγατε για τον αγωγό συγκέντρωσης; Λαμβάνοντας υπόψη τα πλεονεκτήματα και τις αδυναμίες του παρέχει περισσότερη εικόνα.

Πλεονεκτήματα

  • Το ερώτημα είναι πολλαπλών σταδίων, συνήθως πιο σύντομο, πιο συνοπτικό και πιο ευανάγνωστο.
  • Ο αγωγός συγκέντρωσης είναι πιο αποτελεσματικός, προσφέροντας σημαντική βελτίωση σε σχέση με το MapReduce.
  • Υποστηρίζει ενσωματωμένους τελεστές MongoDB που σας επιτρέπουν να σχεδιάζετε το ερώτημά σας με ευελιξία.
  • Υποστηρίζει την επεξεργασία δεδομένων σε πραγματικό χρόνο.
  • Η διοχέτευση συγκέντρωσης είναι εύκολα απορροφήσιμη στο MongoDB και δεν απαιτεί δέσμες ενεργειών τρίτων.
  • Μπορείς δημιουργήστε μια νέα συλλογή MongoDB για τις εξόδους εάν χρειάζεται να τις αποθηκεύσετε.

Μειονεκτήματα

  • Μπορεί να μην είναι τόσο ευέλικτο όσο το MapReduce όταν ασχολείστε με πιο σύνθετες δομές δεδομένων. Δεδομένου ότι δεν χρησιμοποιεί δέσμες ενεργειών τρίτου μέρους, σας περιορίζει σε μια συγκεκριμένη μέθοδο συγκέντρωσης δεδομένων.
  • Η καμπύλη εφαρμογής και εκμάθησής του μπορεί να είναι προκλητική για προγραμματιστές με μικρή ή καθόλου εμπειρία με το MongoDB.

Πότε πρέπει να χρησιμοποιήσετε τη γραμμή MapReduce ή Aggregation Pipeline;

Γενικά, είναι καλύτερο να λάβετε υπόψη τις απαιτήσεις επεξεργασίας δεδομένων σας όταν επιλέγετε μεταξύ του MapReduce και του αγωγού συγκέντρωσης.

Στην ιδανική περίπτωση, εάν τα δεδομένα σας είναι πιο περίπλοκα και απαιτούν προηγμένη λογική και αλγόριθμους σε ένα κατανεμημένο σύστημα αρχείων, το MapReduce μπορεί να σας φανεί χρήσιμο. Αυτό συμβαίνει επειδή μπορείτε εύκολα να προσαρμόσετε τις λειτουργίες μείωσης χάρτη και να τις εισάγετε σε πολλούς κόμβους. Πηγαίνετε στο MapReduce εάν η εργασία επεξεργασίας δεδομένων σας απαιτεί οριζόντια επεκτασιμότητα σε σχέση με την αποδοτικότητα.

Από την άλλη πλευρά, ο αγωγός συγκέντρωσης είναι πιο κατάλληλος για τον υπολογισμό πολύπλοκων δεδομένων που δεν απαιτούν προσαρμοσμένη λογική ή αλγόριθμους. Εάν τα δεδομένα σας βρίσκονται μόνο στο MongoDB, είναι λογικό να χρησιμοποιήσετε τον αγωγό συγκέντρωσης, καθώς διαθέτει πολλούς ενσωματωμένους τελεστές.

Ο αγωγός συγκέντρωσης είναι επίσης ο καλύτερος για επεξεργασία δεδομένων σε πραγματικό χρόνο. Εάν η απαίτηση υπολογισμού σας δίνει προτεραιότητα στην αποτελεσματικότητα έναντι άλλων παραγόντων, θέλετε να επιλέξετε τον αγωγό συγκέντρωσης.

Εκτελέστε σύνθετους υπολογισμούς στο MongoDB

Αν και και οι δύο μέθοδοι MongoDB είναι ερωτήματα επεξεργασίας μεγάλων δεδομένων, μοιράζονται πολλές διαφορές. Αντί για ανάκτηση δεδομένων πριν από την εκτέλεση υπολογισμών, που μπορεί να είναι πιο αργοί, και οι δύο μέθοδοι εκτελούν απευθείας υπολογισμούς στα δεδομένα που είναι αποθηκευμένα στη βάση δεδομένων, καθιστώντας τα ερωτήματα πιο αποτελεσματικά.

Ωστόσο, το ένα αντικαθιστά το άλλο σε απόδοση, και σωστά μαντέψατε. Ο αγωγός συγκέντρωσης υπερτερεί του MapReduce σε απόδοση και απόδοση. Ωστόσο, ενώ μπορεί να θέλετε να αντικαταστήσετε το MapReduce με τον αγωγό συγκέντρωσης πάση θυσία, εξακολουθούν να υπάρχουν συγκεκριμένοι τομείς εφαρμογής όπου η χρήση του MapReduce έχει πιο νόημα.