У нас есть база данных Монго с около 1 млн документов, и мы хотим опросить эту базу данных, используя обработанное поле, чтобы найти документы, которые мы не видели раньше. Для этого мы устанавливаем новое поле с именем _processed
.
Для запроса документов, которые необходимо обработать, мы запрашиваем документы, которые не имеют этого обработанного поля:
db.stocktwits.find({ "_processed" : { "$exists" : false } })
Однако этот запрос каждый раз занимает около 30 секунд, что довольно медленно. Существует индекс (asc), который находится в поле _processed:
db.stocktwits.ensureIndex({ "_processed" : -1 },{ "name" : "idx_processed" });
Добавление этого индекса не влияет на производительность запросов. В коллекции есть несколько других индексов (а именно идентификатор idx и уникальный индекс пары полей в каждом документе).
Поле _processed длинное, возможно, его следует заменить на bool, чтобы ускорить процесс?
Мы попытались использовать запрос $ where (т. Е. $where : this._processed==null
), чтобы сделать то же самое, что и $exists : false
, и производительность примерно такая же (несколько секунд медленнее, что имеет смысл) ...
Есть какие-нибудь идеи о том, что могло бы стать причиной медленной работы (или это нормально)? У кого-нибудь есть предложения по улучшению скорости запросов?
Ура!