Индексная стратегия для динамических c фильтров в DocumentDB - PullRequest
1 голос
/ 02 марта 2020

Я в замешательстве при создании эффективной стратегии индекса.

Я использую Amazon DocumentDB и у меня есть коллекция со следующей структурой:

[
  {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3",
    "field4": "value4",
    "field5": "value5",
    "dateField": "dateValue"
    /* Other fields */
  }
]

Я хочу применить фильтры к этому столбцу и сортируйте его по полю даты, но эти фильтры динамические. Поля От field 1 до field 5 упорядочены по количеству элементов (от максимума к минимуму), и все они необязательны, но, как я уже сказал, всегда сортируются по полю даты.

Мои сомнения:

  • Может ли DocumentDB использовать один единственный индекс для сопоставления и сортировки?

  • Приведенный выше пункт может быть применен для агрегирования ?

  • Если нет, как правильно управлять им?

Мои текущие индексы:

 db.coll.createIndex({ field1: 1, field2: 1, field3: 1, field4: 1, field5: 1 })
 db.coll.createIndex({ dateField: 1 })

Насколько я знаю, field1 является обязательным, но что если другие отсутствуют? Например:

db.coll.find({ field1: value1, field4: value4 })
/* Or */
db.coll.find({ field1: value1, field4: value4, field5: value5 })
/* Or */
db.coll.find({ field1: value1, field2: value2, field5: value5 })
/* Or */
db.coll.find({ field1: value1, field2: value2, field3: value3 })
/* Also I'd like to filter by date */
db.coll.find({ dateField: dateRange, field1: value1, field2: value2, field3: value3 })

В агрегации будет ли правильно использоваться индекс (ы)?

db.coll.aggregate( [
   { $match: {  field1: value1, field2: value2, field5: value5 } },
   { $sort: { dateField: -1 } }
]);

Заранее спасибо

1 Ответ

1 голос
/ 03 марта 2020

MongoBD может использовать один единственный индекс для сопоставления и сортировки.

Если вы говорите, что предлагаете создать один индекс, который состоит из 5 полей - это неправильная стратегия индекса, если ваш запрос не будет наиболее часто имеют все 5 значений.

На основе ваших примеров запросов индивидуальный индекс из 5 полей и поля даты - будет работать лучше. всего 6 индексов.

...