MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb groupby langsam, auch nach dem Hinzufügen des Index

Wie Sie der von Ihnen geschriebenen Abfrage entnehmen können, erfordert diese Art der Aggregation in 2.0, dass Sie Map/Reduce ausführen. Map/Reduce auf MongoDB hat einige Leistungseinbußen, die auf SO vorher behandelt wurden - Wenn Sie nicht in der Lage sind, über einen Cluster zu parallelisieren, werden Sie im Grunde Single-Thread-Javascript über Spidermonkey ausführen - kein schneller Vorschlag. Der Index hilft nicht wirklich, da Sie nicht wählerisch sind - Sie müssen nur den gesamten Index sowie möglicherweise das Dokument scannen.

Mit der bevorstehenden Veröffentlichung von 2.2 (zum Zeitpunkt des Schreibens dieses Artikels derzeit in rc1) haben Sie jedoch einige Optionen. Das Aggregations-Framework (das ist ein natives, nicht JS-basiertes Map/Reduce), das in 2.2 eingeführt wurde, hat einen eingebauten Gruppenoperator und wurde speziell erstellt, um diese Art von Vorgang in MongoDB zu beschleunigen.

Ich würde empfehlen, 2.2 auszuprobieren und zu sehen, ob sich Ihre Leistung beim Gruppieren verbessert. Ich denke, es würde in etwa so aussehen (Anmerkung:nicht getestet):

db.alarm.aggregate(
    { $group : {
        _id : "$serverName",
        count : { $sum : 1 }
    }}
);