Ich beginne gerade mit mongo db und versuche, ein paar einfache Dinge zu machen. Ich habe meine Datenbank mit einer Sammlung von Daten gefüllt, die die Eigenschaft "item" enthält. Ich wollte Zählung versuchen, wie viel Zeit jeder Artikel in der SammlungMongoDB-Aggregation so langsam wie MapReduce?
Beispiel eines Dokuments ist:
{ "_id" : ObjectId("50dadc38bbd7591082d920f0"), "item" : "Pons", "lines" : 37 }
So entwarf ich diese beiden Funktionen für MapReduce tun (geschrieben in Python mit pymongo)
all_map = Code("function() {"
" emit(this.item, 1);"
"}")
all_reduce = Code("function (key, values) {"
" var sum = 0;"
" values.forEach(function(value){"
" sum += value;"
" });"
" return sum;"
"}")
Dies funktionierte wie ein Charme, so begann ich die Sammlung zu füllen. Bei etwa 30.000 Dokumenten dauert der Mapreduce bereits länger als eine Sekunde ... Da NoSQL über Geschwindigkeit prahlt dachte ich, ich muss etwas getan haben falsch!
Eine Frage hier bei Stack Overflow ließ mich die Aggregation Feature von Mongodb überprüfen. Also habe ich versucht, die Gruppe + sum + sort things zu verwenden. Kam mit dieser:
db.wikipedia.aggregate(
{ $group: { _id: "$item", count: { $sum: 1 } } },
{ $sort: {count: 1} }
)
Dieser Code funktioniert gut und gibt mir die gleichen Ergebnisse wie der mapreduce Satz, aber es ist genauso langsam. Mache ich etwas falsch? Muss ich wirklich andere Werkzeuge wie hadoop verwenden, um eine bessere Leistung zu erhalten?
$ Gruppe kann nicht einen Index verwenden und dann nehmen Sie die vollständige Tabelle scannen und sortieren auf einem berechneten Feld, das wieder nicht einen Index verwenden kann ... hmmm ja ich denke, das könnte leicht so langsam und MR sein, werfen Sie einen Blick auf die Hinweise zu $ sort: http://docs.mongodb.org/manual/reference/aggregation/#_S_sort.Wenn ich ehrlich bin, denke ich nicht, dass dies der Fehler des Tools ist, sondern mehr von der Gestaltung des Schemas, wenn Sie eine solche Abfrage in Echtzeit-Zeit benötigen – Sammaye
lesen Sie dies für die Klarstellung: http: // stackoverflow.com/questions/12015064/mongodb-mapreduce-and-sorting –
@Sammaye Wie Sie meine Schlusssätze lesen, werden Sie feststellen, dass ich nicht auf die Werkzeuge tanze. Ich habe noch keine Erfahrung mit NoSQL und MongoDB. Ich frage nur, was falsch ist. Wie ich mein Design verbessern kann, um dieses Ding auf den richtigen Weg zu bringen. – Arninja