I Beispiele für Aggregationsanfragen ähnlich wie dies leite:Wie Agregate Abfragen in MongoDB beschleunigen
https://www.compose.com/articles/aggregations-in-mongodb-by-example/
db.mycollection.aggregate([
{
{ $match: {"nested.field": "1110"}}, {
$group: {
_id: null,
total: {
$sum: "$nested.field"
},
average_transaction_amount: {
$avg: "$nested.field"
},
min_transaction_amount: {
$min: "$nested.field"
},
max_transaction_amount: {
$max: "$nested.field"
}
}
}
]);
Eine Sammlung, die ich geschaffen habe 5.000.000 große JSON-Dokumente eingefügt (rund 1.000 K- > V Paare, einige sind verschachtelt.
Bevor Sie einen Index für ein verschachteltes Feld hinzufügen, dauert es etwa 5 Minuten, um dieses Feld zu zählen. Nach dem Hinzufügen von Index - für die Zählung dauert es weniger als eine Sekunde (was gut ist).
Jetzt versuche ich SUM oder AVG oder jedes andere Beispiel oben zu tun - es dauert Minuten (nicht Sekunden). Gibt es eine Möglichkeit, aggregierte Abfragen in MongoDB zu verbessern?
Danke!
[Holen Sie sich ein größeres Boot] (http://www.urbandictionary.com/define.php?term=We%27re%20Gonna%20Need%20a%20Bigger%20Boat). Während Sie tun, was Sie können, haben Sie optimale "Abfrage" Auswahl, dauert der schiere Prozess der Verarbeitung einer Menge von Daten erhebliche Zeit. Weitaus mehr als ein Abfrageplaner benötigt, um auszuwerten, wie viele Ergebnisse einem Index entsprechen (insbesondere wenn das alles im Speicher ist). –
Ok .. Ich führe eine ähnliche Abfrage auf MySQL (Summe) für jede Spalte und es dauert weniger als ein paar Sekunden auf 5M Datensätze .. Ich verstehe, dass geschachtelte JSON in MySQL nicht leicht tun kann (oder zumindest nicht so schnell ist) hat für diesen Fall eine bessere Leistung mit Mongo erwartet. Oder vielleicht gibt es noch andere Verbesserungen? (Ich bekomme zufällige JSON von Kunden, so habe ich keine Kontrolle darüber, wie es aussehen wird, bevor es zu mir kommt, aber einige Felder speichern und indexieren müssen). – Joe
Je nachdem wie statisch Ihre Daten sind, könnten Sie diese Abfrage vielleicht alle ausführen X und füge die Ergebnisse in die Dokumente ein. – Skami