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

Индексът MongoDB/Mongoose прави заявката по-бърза или я забавя?

Грешно го четете

Вие тълкувате погрешно намерението на цитирания блок там за това какво .ensureIndex() (вече отхвърлено, но все още се нарича от mongoose код) всъщност прави тук в контекста.

В mongoose вие дефинирате индекс на ниво схема или модел, както е подходящо за вашия дизайн. Това, което mongoose "автоматично" прави за вас, е при свързване да проверява всеки регистриран модел и след това да извиква съответния .ensureIndex() методи за предоставените дефиниции на индекси.

Какво всъщност прави това?

Е, в повечето случаи, след като вече сте стартирали приложението си преди и .ensureIndexes() методът е изпълнен е Абсолютно нищо . Това е малко преувеличено, но повече или по-малко звучи вярно.

Тъй като дефиницията на индекса вече е създадена в колекцията на сървъра, последващо извикване не прави нищо. Т.е. не изпуска индекса и не "създава отново". Така че реалната цена е почти нищо, след като самият индекс е създаден.

Създаване на индекси

Така че тъй като mongoose е само слой върху стандартния API, createIndex() метод съдържа всички подробности за случващото се.

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

Освен това всички индекси имат цена, особено по отношение на използването на диска, както и допълнителни разходи за запис на допълнителна информация извън самата колекция от данни.

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

Това са основните „компромиси“, свързани с индексите.

Модел за внедряване

Назад към цитирания блок от документацията, има истинско намерение зад този съвет.

Типично в моделите на внедряване и особено при миграции на данни е нещата да се правят в следния ред:

  1. Попълване на данни в съответните колекции/таблици
  2. Активирайте индекси на колекция/таблични данни, подходящи за вашите нужди

Това е така, защото има разходи, свързани със създаването на индекс, и както беше споменато по-рано, желателно е да получите най-оптималния размер от изграждането на индекса, както и да избягвате всяко вмъкване на документ също да има излишни разходи за писане на запис в индекс, когато сте извършване на това „зареждане“ групово.

Така че за това са индексите, това са разходите и ползите и съобщението в документацията на mongoose е обяснено.

Като цяло обаче предлагам да прочетете за Индекси на бази данни за това, което са и какво правят. Представете си да влезете в библиотека, за да намерите книга. На входа има картотека. Обикаляте ли библиотеката, за да намерите книгата, която искате? Или го търсите в картотеката, за да намерите къде е? Създаването на този индекс отне на някого време и също така го поддържа актуализиран, но спестява на „вас“ времето да обикаляте цялата библиотека, само за да можете да намерите книгата си.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. групиране по дата в заявка за mogodb без отчитане на времето

  2. Актуализиране и търсене на структура за вграждане на Mongodb?

  3. MongoError:свързване НЕИЗВЕСТНО

  4. MongoDB/JS - Разширено фасетно търсене - Как да получите само подходящи категории/стойности

  5. Последователи - дизайн на база данни mongodb