MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongo брои наистина бавно, когато има милиони записи

Заявките за преброяване, индексирани или по друг начин, са бавни поради факта, че MongoDB все още трябва да направи пълно обхождане на b-дърво, за да намери подходящия брой документи, които отговарят на вашите критерии. Причината за това е, че b-дървовидната структура на MongoDB не се „отчита“, което означава, че всеки възел не съхранява информация за количеството елементи във възела/поддървото.

Проблемът се съобщава тук https://jira.mongodb.org/browse/SERVER-1752 и в момента няма заобиколно решение за подобряване на производителността, освен ръчно поддържане на брояч за тази колекция, което очевидно идва с няколко недостатъка.

Също така имайте предвид, че версията db.col.count() (така че няма критерии) може да приеме голям пряк път и всъщност не изпълнява заявка, поради което е бърза. Това каза, че не винаги отчита същата стойност като заявка за преброяване, която би трябвало да върне всички елементи (няма да бъде в шардирани среди с висока производителност на запис например). Подлежи на дебат дали това е грешка или не. Мисля, че е така.

Имайте предвид, че във 2.3+ беше въведена значителна оптимизация, която трябва (и наистина) да подобри производителността на броя на индексираните полета. Вижте:https://jira.mongodb.org/browse/SERVER-7745



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor - Защо трябва да използвам this.userId над Meteor.userId(), когато е възможно?

  2. MongoDB - размерът на файла е огромен и расте

  3. Реагирайте на POST заявки с Express/Node и MongoDB

  4. Как да търсите подмасиви в MongoDB

  5. Задайте изчакване на Mongo в Spring Boot