MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mappa-Riduci le prestazioni in MongoDb 2.2, 2.4 e 2.6

Ecco lo stato attuale delle funzionalità di Map/Reduce in MongoDB

1) La maggior parte delle limitazioni delle prestazioni per Map/Reduce rimangono ancora in MongoDB versione 2.2. Il motore Map/Reduce richiede comunque che ogni record venga convertito da BSON a JSON, i calcoli effettivi vengono eseguiti utilizzando il motore JavaScript incorporato (che è lento) e c'è ancora un unico blocco JavaScript globale, che consente solo un singolo thread JavaScript per eseguire in una sola volta.

Sono stati apportati alcuni miglioramenti incrementali a Mappa/Riduci per i cluster partizionati. In particolare, l'operazione di riduzione finale è ora distribuita su più shard e anche l'output viene suddiviso in parallelo.

Non consiglierei Map/Reduce per l'aggregazione in tempo reale in MongoDB versione 2.2

2) A partire da MongoDB 2.2, ora c'è un nuovo Aggregation Framework. Questa è una nuova implementazione delle operazioni di aggregazione, scritta in C++ e strettamente integrata nel framework MongoDB.

La maggior parte dei lavori Mappa/Riduci possono essere riscritti per utilizzare il Framework di aggregazione. Di solito funzionano più velocemente (il miglioramento della velocità di 20 volte rispetto a Map/Reduce è comune nella versione 2.2), sfruttano appieno il motore di query esistente e puoi eseguire più comandi di aggregazione in parallelo.

Se hai requisiti di aggregazione in tempo reale, il primo punto di partenza è il Framework di aggregazione. Per ulteriori informazioni sul framework di aggregazione, dai un'occhiata a questi link:

  • http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
  • http://docs.mongodb.org/manual/reference/aggregation/

3) Ci sono stati miglioramenti significativi in ​​Map/Reduce in MongoDB versione 2.4. Il motore JavaScript SpiderMonkey è stato sostituito dal motore JavaScript V8 e non esiste più un blocco JavaScript globale, il che significa che più thread Map/Reduce possono essere eseguiti contemporaneamente.

Il motore Map/Reduce è ancora notevolmente più lento del framework di aggregazione, per due ragioni principali:

  • Il motore JavaScript viene interpretato, mentre Aggregation Framework esegue codice C++ compilato

  • Il motore JavaScript richiede comunque che ogni documento in esame venga convertito da BSON a JSON; se stai salvando l'output in una raccolta, il set di risultati deve essere riconvertito da JSON a BSON

Non ci sono modifiche significative in Mappa/Riduci tra 2.4 e 2.6.

Continuo a non consigliare di utilizzare Map/Reduce per l'aggregazione in tempo reale in MongoDB versione 2.4 o 2.6.

4) Se hai davvero bisogno di Map/Reduce, puoi anche guardare l'adattatore Hadoop. Ci sono ulteriori informazioni qui:

  • http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
  • http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
  • http://www.mongodb.org/display/DOCS/Hadoop+Quick+Start