Ich habe eine Mongodb db mit mehr als 100 Millionen Dokumente. ich möchte Aggregation machen, damit ich Statistiken über Dokumente geben kann. mein Dokument wie folgt aussehen:mongodb Aggregat auf riesigen Datenmenge
{
"categ": "categ_4",
"code": 200,
"date": "01/01/2017",
"host": "www.myhost.com",
"hour": "19",
"http_ver": "HTTP/1.1",
"idate": 20170101,
"length": 21,
"protocol": "https",
"remote_ip": "111.22.333.44",
"resp_time": 0,
"time": "19:53:15",
"url": "my_url",
}
wenn aggregieren, i führen Sie eine Abfrage wie dies in meinem Shell:
db.data.aggregate([{"$match": {"code":200}}, {"$group": {_id : "$code", total : {"$sum" : 1}}},{"$sort" : {_id: 1}}])
das Problem ist, dass es eine sehr lange Zeit zu berechnen dauert. Das ist zu langsam. Gibt es eine Möglichkeit, diesen Vorgang zu beschleunigen? i tryed Index auf "Code" Feld zu schaffen, aber ohne Erfolg
db.data.createIndex({code:1})
was kann ich Aggregation schneller tun?
danke
meine Abfrage war falsch (ich musste den "$ match" -Teil entfernen). Was ich bekommen möchte, ist etwa so: 'db.data.aggregate ([{" $ group ": {_id:" $ code ", total: {" $ sum ": 1}}}, {" $ Sortieren ": {insgesamt wurden 1}}]) { "_id": 404, "total": 11729} { "_id": 302, "total": 56068} { "_id": 410" total“: 579.872} { "_id": 304, "total": 8.201.025} { "_id": 301, "total": 1.639.247} { "_id" 200, "total": 82.234.244} ' –
Was meinst du mit "Einfaches Zählen versuchen (** mit Index **)", gibt es eine effiziente Möglichkeit, Indizes zu Mongodb hinzuzufügen? Wie ich oben gesagt habe, habe ich die CreateIndex-Funktion versucht, aber es scheint nicht zu beeinflussen, wie Aggregation funktioniert. Ich weiß nicht, wie Indizes mit mongodb funktionieren, oder? –
@DanyM Wenn die Abfrage "find/count/$ match" Indizes verwenden kann, verwendet sie sie, anstatt jedes Dokument in der Sammlung zu scannen (siehe [Indexes Handbuch] (https://docs.mongodb.com/manual/indexes/)) . Wenn Ihre Aggregationsabfrage nicht mit dem $ match-Schritt beginnt, verwendet sie keine Indizes. –