Я новичок в MongoDB и пытаюсь убедиться, что настроил правильные индексы.Я видел подобные вопросы о составных индексах здесь, но ни один из них точно не описывает ситуацию, в которой я нахожусь.
Примечание: Я использую Rails 3.2 и Mongoid.
У меня есть коллекция событий, которые всегда сортируются (и часто ищутся) по дате, но, как правило, также с другим параметром.Например, я мог бы хотеть найти События, которые соответствуют определенному набору категорий в пределах определенного диапазона дат;или я мог бы хотеть найти События, которые соответствуют определенному человеку в пределах определенного диапазона дат.Типы поиска будут:
- Всегда по дате (или, по крайней мере, сортировка по дате)
- Часто по категории
- Иногда дополнительно по [человек, место,или ключевое слово]
Первым решением, которое я придумал, было несколько составных ключей, которые начинаются с даты и категории, например так:
class Event
...
index ([
[:date, Mongo::DESCENDING],
[:category_id, Mongo::ASCENDING]
["people.person_id", Mongo::ASCENDING]
])
index ([
[:date, Mongo::DESCENDING],
[:category_id, Mongo::ASCENDING]
[:venue_id, Mongo::ASCENDING]
])
index ([
[:date, Mongo::DESCENDING],
[:category_id, Mongo::ASCENDING]
[:keywords, Mongo::ASCENDING]
])
Но это кажется немного смешнымчтобы я продолжал перекрывать индекс "date + category_id", а также о случаях, когда я не ищу по category_id?
UPDATE: dcrosta спросил, чтокакие запросы будут выполняться, и как часто.Не зная точно, могу предположить, что это будет выглядеть примерно так:
Очень часто:
- по дате
- по дате+ категория
- по дате + ключевое слово
- по дате + категория + ключевое слово
Довольно часто:
- по дате + человек
- по дате + место проведения
Реже:
- по дате + категория + место проведения
- по дате + категория + человек