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

В MongoDB използвам голяма заявка, как ще създам съставен индекс или единичен индекс, така че времето ми за реакция се увеличава

Като цяло ще искате да поставите индекс на полетата, използвани най-често като критерии за филтриране във вашите най-важни/чести заявки, като първо започнете с най-селективните полета. Има доста прилични насоки по темата като част от документацията на MongoDB . Едно твърдение от особен интерес за вашия случай вероятно е това, тъй като имате много $or s:

Най-важното нещо тук обаче е да измервате, измервате, измервате и разглеждате плановете за изпълнение на заявки с помощта на explain() . Причината е, че най-вероятно ще имате различни видове заявки, които вашето приложение трябва да поддържа, и ще трябва да направите компромис в даден момент, когато трябва да избирате между разходите за поддръжка на индекса (напр. заключвания за запис по време на актуализации на индекси и изисквания за дисково пространство) и теоретично най-бързото решение, при което всички полета, използвани в една заявка, се покриват от един индекс.

Цялата тази тема за индексиране е малко неясна, което силно зависи от точния ви сценарий:

  • Данните ви силно ли се актуализират и записите трябва ли да са супер бързи (ще искате по-малко/по-малки индекси) или вашите данни са доста стабилни с чести четения, които трябва да бъдат бързи (използвайте повече/по-големи индекси)?
  • Какви видове заявки трябва да поддържате? Доколко си приличат по отношение на филтрите си? Определени комбинации от филтри ще бъдат ли по-вероятни от други? Кои заявки трябва да се представят добре, кои могат да бъдат малко по-бавни?
  • Как се разпределят данните във вашите потенциално индексирани полета?
  • и така нататък...

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

Накратко:изберете итеративен подход и започнете с добавяне на индекс (бих предложил да добавите такъв на isBlockedByAdmin , isDelete и information.shares.userId ), след това измерете ефективността на вашата заявка и след това прецизирайте индекса си въз основа на констатациите си (и отново, и отново, ...).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. РЕАГИРАНЕ на заявка за извличане на публикация

  2. Използване на функция MongoDB .findOne() с вложена стойност на документ

  3. Как да изхвърлите колекция в json файл с помощта на pymongo

  4. Да се ​​съхранява _Id като обект или низ в MongoDB?

  5. Валидирайте целочислени стойности с mongoose