MongoDB: Как я могу оптимизировать запрос агрегации с большими данными - PullRequest
0 голосов
/ 03 мая 2019

В коллекции Mongodb насчитывается 30 миллионов записей.Когда запрос с существующими значениями он дает результат в течение 1 секунды.Но для запроса с несуществующим значением потребовалось 40 или 45 секунд, чтобы получить результат как ноль или 0. Почему это произошло так

String cDate = dateFormat.format(date);
String pastTime = timeFormatMin.format(new Date(System.currentTimeMillis() - 3600 * 1000));
Criteria dateQuery = Criteria.where("Date").is(cDate);
Criteria timeQuery = Criteria.where("Time").gt(pastTime);
Criteria appQuery = Criteria.where("appID").is(appId).andOperator(Criteria.where("appID").exists(true));
Criteria criteria = new Criteria().andOperator(dateQuery, timeQuery, appQuery);

MatchOperation matchOperation = match(criteria);
GroupOperation groupOperation = group("appID").count().as("idcount");
ProjectionOperation projection = project()
            .andExpression("_id").as("appID")
            .andExpression("idcount").as("Count");
SortOperation sortOperation = sort(new Sort(Sort.Direction.DESC, "_id"));
LimitOperation limitOperation = limit(1);

Aggregation aggregation = newAggregation(matchOperation, sortOperation, limitOperation);
AggregationResults<CommonLogic> logResult = mongoTemplate.aggregate(aggregation, "commonLogic", CommonLogic.class);
List<CommonLogic> list = logResult.getMappedResults();

1 Ответ

0 голосов
/ 03 мая 2019

Предполагая, что поле 'appID' уже проиндексировано в БД (что очень помогает конвейеру агрегации): для указанного размера данных вышеупомянутый запрос, скорее всего, потребует времени в операции сортировки.попробуйте указать параметр агрегации allowDiskUse: true.Посмотрите на этот ТАК вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...