Я создаю механизм запросов, базовой базой данных которого является 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 использовать индексы для атрибутов фильтра, который он может, а затем вручную фильтровать для завершения регулярного выражения, или использование регулярного выражения полностью исключает использование индексов для запроса.