sql >> Databáze >  >> NoSQL >> MongoDB

Mongo počítá opravdu pomalu, když existují miliony záznamů

Počet dotazů, indexovaných nebo jiných, je pomalý kvůli skutečnosti, že MongoDB stále musí projít celým b-stromem, aby našel vhodný počet dokumentů, které odpovídají vašim kritériím. Důvodem je to, že struktura b-stromu MongoDB se „nepočítá“, což znamená, že každý uzel neukládá informace o množství prvků v uzlu/podstromu.

Problém je nahlášen zde https://jira.mongodb.org/browse/SERVER-1752 a v současné době neexistuje žádné jiné řešení, jak zlepšit výkon, než ruční udržování počítadla pro tuto kolekci, což samozřejmě přináší několik nevýhod.

Všimněte si také, že verze db.col.count() (takže žádná kritéria) může mít velkou zkratku a ve skutečnosti neprovádí dotaz, a proto je její rychlost. To znamená, že ne vždy hlásí stejnou hodnotu jako dotaz na počet, který by měl vrátit všechny prvky (nebude to například ve sdílených prostředích s vysokou propustností zápisu). K diskusi, zda je to chyba nebo ne. Myslím, že ano.

Všimněte si, že ve verzi 2.3+ byla zavedena významná optimalizace, která by měla (a také zlepšuje) výkon počítání na indexovaných polích. Viz:https://jira.mongodb.org/browse/SERVER-7745



  1. Jak vybrat jedno pole pro všechny dokumenty v kolekci MongoDB?

  2. Vybrat více hodnot z datové struktury Redis atomicky?

  3. Použijte Heroku addon mongolab s node.js

  4. Délka hodnoty pole řetězce v mongoDB