Лучший способ построить индексы MongoDB для покрытия всех типов запросов

Я создаю механизм запросов, базовой базой данных которого является DocumentDB (он же MongoDB 3.6), и мне было интересно, как лучше всего построить для него индексы, чтобы получить наилучшую возможную производительность запросов. Хотя определенно будут определенные запросы, которые будут более распространены, чем другие, тот факт, что пользователи будут создавать эти запросы, цель состоит в том, чтобы иметь хорошую (достаточную) производительность для любой комбинации атрибутов для запроса.

Документ в этой коллекции будет иметь структуру, подобную этой:

{ "ContainerName" : "hello",
  "description" : "test",
  "timestamp" : 1000000,
  "isActive" : true,
  (15 more attributes of strings, booleans, numbers),
  "events": [
      { "eventId" : "test",
        (10 more attributes of strings, booleans, numbers)
      },
      { "eventId" : "test2",
        (10 more attributes of strings, booleans, numbers)
      }],
  "resources": [
      { "resourceId" : "test",
        (8 more attributes of strings, booleans, numbers)
      }]
}

Я хочу иметь возможность запрашивать все комбинации атрибутов, включая встроенные. Например, дайте мне контейнер с именем hello и событием с идентификатором eventId теста. Если бы количество атрибутов было достаточно маленьким, возможно, я мог бы сделать все возможные комбинации составным ключом, но здесь это было бы невозможно.

Кроме того, если бы я хотел использовать регулярное выражение для строк, содержащихся в некоторых полях, будет ли MongoDB использовать индексы для атрибутов фильтра, который он может, а затем вручную фильтровать, чтобы завершить регулярное выражение, или использование регулярного выражения полностью исключает использование индексов для запроса.


person liqenw    schedule 04.08.2020    source источник
comment
См. 62268015" title="Как правильно индексировать в mongodb, когда существует большая комбинация полей"> stackoverflow.com/questions/62263023/.   -  person D. SM    schedule 05.08.2020