sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo räknas väldigt långsamt när det finns miljontals skivor

Räkna frågor, indexerade eller på annat sätt, är långsamma på grund av att MongoDB fortfarande måste göra en hel b-tree walk för att hitta rätt antal dokument som matchar dina kriterier. Anledningen till detta är att MongoDB b-trädstrukturen inte "räknas" vilket innebär att varje nod inte lagrar information om mängden element i noden/delträdet.

Problemet rapporteras här https://jira.mongodb.org/browse/SERVER-1752 och det finns för närvarande ingen lösning för att förbättra prestandan annat än att manuellt underhålla en räknare för den samlingen, vilket uppenbarligen har några nackdelar.

Observera också att versionen av db.col.count() (så inga kriterier) kan ta en stor genväg och faktiskt inte utför en fråga, därför är den snabbare. Som sagt rapporterar den inte alltid samma värde som en räkningsfråga skulle returnera alla element (det kommer till exempel inte att vara i fragmenterade miljöer med hög skrivkapacitet). Upp till diskussion om det är en bugg eller inte. Jag tror att det är det.

Observera att i 2.3+ introducerades en betydande optimering som borde (och gör) förbättra prestanda för räkningar på indexerade fält. Se:https://jira.mongodb.org/browse/SERVER-7745



  1. Minska utförandetiden för jobb med sidekiq

  2. MongoDB, MapReduce och sortering

  3. Hur uppdaterar jag ett Mongo-dokument efter att ha infogat det?

  4. MongoDB fynd i samling med okänd nyckel