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

Защо и кога е необходимо повторно изграждане на индекси в MongoDB?

Според документацията на MongoDB, обикновено няма нужда от рутинно повторно изграждане на индекси.

ЗАБЕЛЕЖКА :Всеки съвет относно съхранението става по-интересен с MongoDB 3.0+, който въведе API на модулен механизъм за съхранение . Моите коментари по-долу са конкретно по отношение на механизма за съхранение на MMAP по подразбиране в MongoDB 3.0 и по-стари версии. WiredTiger и други машини за съхранение имат различни реализации за съхранение на данни и индекси.

Може да има известна полза от повторното изграждане на индекс с машината за съхранение MMAP, ако:

  • Индексът заема по-голямо от очакваното количество пространство в сравнение с данните. Забележка:трябва да наблюдавате историческите данни и размера на индекса, за да имате базова линия за сравнение.

  • Искате да мигрирате от по-стар формат на индекс към по-нов. Ако е препоръчително повторно индексиране, това ще бъде споменато в бележките за надстройка. Например MongoDB 2.0 въведе значителни подобрения в производителността на индекса така че бележките по изданието включват предложение за повторно индексиране към формат v2.0 след надграждане. По подобен начин MongoDB 2.6 въведе 2dsphere (v2.0) индекси които имат различно поведение по подразбиране (разредени по подразбиране). Съществуващите индекси не се възстановяват след надграждане на версията на индекса; изборът дали/кога да се надстрои е оставен на администратора на базата данни.

  • Променихте _id формат за колекция към или от монотонно нарастващ ключ (напр. ObjectID) към произволна стойност. Това е малко езотерично, но има оптимизация на индекса, която разделя кофите на b-дървото 90/10 (вместо 50/50), ако вмъквате _id s, които винаги се увеличават (ref:SERVER-983 ). Ако естеството на вашия _id s промени значително, може да е възможно да се изгради по-ефективно b-дърво с повторно индексиране.

За повече информация относно общото поведение на B-tree вижте:Wikipedia:B-tree

Визуализиране на използването на индекс

Ако сте наистина любопитни да се заровите малко повече във вътрешността на индекса, има някои експериментални команди/инструменти, които можете да опитате. Очаквам те да са ограничени само до MongoDB 2.4 и 2.6:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb:кога да се обадя на secureIndex?

  2. Грешка в твърдението:1 ==0 за командата MongoDB deleteOne

  3. Ръководство за разработчици за комплекти реплики на MongoDB

  4. mongodb:съхраняване на йерархична дървовидна структура?

  5. Как да конвертирате BSON Timestamp от Mongo changestream в дата?