У меня есть коллекция Mongo, где у каждого документа есть набор уникальных встроенных ключей:
{
Facebook :
{
Archived:'False' //non unique
'fan_count_December_19_2011':12345, //unique
'unique_views_count_December_19_2011':12345, //unique
'post_count_December_19_2011':12345, //unique
...
...
}
}
Мы ищем эти документы по следующему запросу:
db.metrics.find({
{'Facebook.fan_count_December_19_2011' : {'$ne':null}},'Archived':'False'}
}
).limit(1)
Проблема в том, что с 6000 таких документов это немного медленно. Просмотр журнала Explain (); на выполнение каждого запроса в среднем уходит 0,06 секунды, и каждый раз выполняется полное сканирование коллекции.
Наш сервис должен выполнить вышеуказанный запрос примерно 100 раз (для 100 различных ключей); что при 0,06 п / с добавляет до 6 секунд на вызов (не включая нагрузку на сайт, обслуживающий данные).
Отправка всех ключей в одном пакете и выполнение одного большого запроса потребует серьезной перезаписи уровня данных; которого я пытаюсь избежать из-за приближающегося сжатого срока.
Я просматривал документацию, и, похоже, нет способа получить индекс на основе ключа. В документации сказано, что вы можете индексировать встроенный ключ; но это, кажется, только индексировать значения. Это также не приносит мне большой пользы; поскольку каждый ключ в системе уникален; для каждого нового ключа должен быть индекс.
Если не пересматривать структуру нашего документа (что потребует серьезных изменений); Можно ли как-нибудь ускорить этот запрос к существующей коллекции в ее текущем формате?
Любой конструктивный вклад приветствуется.
Спасибо,
Frank