Подсчет количества записей в коллекции, соответствующих запросу, даже для индексированного поля занимает слишком много времени. Например, допустим, что есть коллекция, состоящая из 10000 записей, и есть индекс в поле createDate этой коллекции. Получение последних десяти записей из коллекции выполняется быстрее, чем подсчет количества записей, созданных в последний день. Для возврата результата запроса подсчета требуется более 5 секунд, иногда даже до 70 секунд. Есть ли у вас какие-либо идеи, как решить эту проблему, каков наилучший способ решить эту проблему?
Кстати, мы также используем morphia, и мы увидели, что получение подсчета с помощью morphia еще медленнее, поэтому для запросов на подсчет мы преобразуем запрос morphia в запрос драйвера Java. Кто-нибудь сталкивался с подобной ситуацией, почему морфий реагирует еще медленнее? Это происходит только для запросов на подсчет или в целом это медленно по сравнению с использованием только java-драйвера?
Мы будем очень признательны за помощь, предложения или обходные пути, наше приложение в значительной степени зависит от запросов на подсчет, и медлительность системы действительно раздражает нас прямо сейчас.
Заранее спасибо.
.explain()
вашего запроса должен помочь добраться до основной проблемы - этот запрос никогда не должен занимать так много времени. - person xeraa   schedule 28.12.2012.getIndexes()
? И в идеале все в исходном вопросе - комментарии для этого не очень подходят :) - person xeraa   schedule 28.12.2012scanAndOrder: false
), толькоnYields
довольно велико. Запрос приостанавливается 396 раз, чтобы позволить другим запросам выполняться, но если запрос занимает так много времени, и у вас есть другие запущенные, этого следует ожидать. Было бы интересно, если бы исправление в 2.4 помогло, но в противном случае я не могу обнаружить какой-либо серьезной проблемы. Ваши индексы помещаются в ОЗУ (db.stats()
)? - person xeraa   schedule 28.12.2012