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

Mongo zählen sehr langsam, wenn es Millionen von Datensätzen gibt

Zählabfragen, indexiert oder anderweitig, sind langsam, da MongoDB immer noch einen vollständigen B-Tree-Walk durchführen muss, um die entsprechende Anzahl von Dokumenten zu finden, die Ihren Kriterien entsprechen. Der Grund dafür ist, dass die B-Tree-Struktur von MongoDB nicht "gezählt" wird, was bedeutet, dass jeder Knoten keine Informationen über die Anzahl der Elemente im Knoten/Teilbaum speichert.

Das Problem wird hier https://jira.mongodb.org/browse/SERVER-1752 und es gibt derzeit keine Problemumgehung, um die Leistung zu verbessern, außer der manuellen Pflege eines Zählers für diese Sammlung, was offensichtlich einige Nachteile mit sich bringt.

Beachten Sie auch, dass die db.col.count()-Version (also keine Kriterien) eine große Abkürzung nehmen kann und keine Abfrage tatsächlich durchführt, daher ist sie schnell. Allerdings wird nicht immer derselbe Wert gemeldet wie bei einer count-Abfrage, die alle Elemente zurückgeben sollte (z. B. nicht in Sharding-Umgebungen mit hohem Schreibdurchsatz). Ob das ein Bug ist, steht zur Debatte. Ich denke schon.

Beachten Sie, dass in 2.3+ eine signifikante Optimierung eingeführt wurde, die die Leistung von Zählungen in indizierten Feldern verbessern sollte (und tut). Siehe:https://jira.mongodb.org/browse/SERVER-7745