Индексирование в mongodb - один или два индекса для связанных полей - PullRequest
0 голосов
/ 27 марта 2019

Я создаю коллекцию в mongodb, и она будет содержать 1Tera сущностей.Запросы к нему в настоящее время требуют 5 составных индексов для этой коллекции.
Я знаю, что слишком много индексов не рекомендуется, но в этой коллекции есть частые запросы, которые необходимо проиндексировать.
В одном случае я размышляю над тем, как смоделировать свои данные и индексы:
В документах могут быть родители двух типов.ПАРЕНТА и ПАРЕНТБ.запросы для каждого типа отдельно.

У меня есть два варианта:

1. сохранить 2 поля для 2 типов родителей и иметь индекс для каждого поля

{
    parentsA: ['parentA1', 'parentA2']
    parentsB: ['parentB1]
}
сохранить 1 поле, которое будет включать тип и один индекс для него:
    {
        parents: [
            {parentType: 'PARENTA', parentId: 'parentA1'}, 
            {parentType: 'PARENTA', parentId: 'parentA2'}, 
            {parentType: 'PARENTB', parentId: 'parentB1'}
        ]
    }

, а затем, когда я фильтрую, я также добавляю тип (PARENTA / PARENTB).

Является ли решение 2 более эффективным, потому что мне нужен 1 индекс вместо 2?(Учитывая, что у меня уже есть 5 других составных индексов).

1 Ответ

0 голосов
/ 27 марта 2019

2 индекса выше 1 - это незначительные накладные расходы.Лучшее моделирование определенно будет вторым по другим причинам, таким как:

  1. Вам не нужно менять схему, когда тип родителей увеличивается на всякий случай в будущем.
  2. Запрос к свойству всегда лучше, чем запрос массива для соответствующего значения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...