Проблема с «Сортировка превышена лимит памяти» MongoDb весной - PullRequest
2 голосов
/ 06 июня 2019

Я пишу метод для реализации запроса с использованием MongoRepository, я использую агрегирование в проекте Java / Spring, но при тестировании оно дает превышение лимита памяти.

Я пытался использовать

newAggregationOptions().cursorBatchSize(pageable.getPageSize()).allowDiskUse(true).build()

но не сработало

мой метод:

...
        var matchCriteria = match(criteria);

        var unwindVariations = unwind("variations", false);


        var sort = sort(Sort.Direction.ASC, "variations.plataformStatus.status");

        var countResult = count().as("totalElements");
        var aggregationOptions = Aggregation.newAggregationOptions().cursorBatchSize(pageable.getPageSize()).allowDiskUse(true).build();

        var countAggregation = newAggregation(
                matchCriteria,
                unwindVariations,
                sort,
                countResult)
                .withOptions(aggregationOptions);

        var totalElements = mongoTemplate.aggregate(countAggregation, "PRODUCT", Map.class).getMappedResults();


сообщение об ошибке:

com.mongodb.MongoCommandException: Command failed with error 16819 (Location16819): 'Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.' on server cluster0-shard-00-01-du380.mongodb.net:27017.

1 Ответ

1 голос
/ 06 июня 2019

Вы должны включить allowDiskUse .

По умолчанию операция сортировки имеет ограничение в 100 МБ (в памяти), что позволяет использовать эту опцию в вашей операции, чтобы использовать больший размер.

Из документации сортировки MongoDB :

Этап $ sort имеет ограничение в 100 мегабайт оперативной памяти.По умолчанию, если уровень превышает этот предел, $ sort выдаст ошибку.Чтобы разрешить обработку больших наборов данных, установите для параметра allowDiskUse значение true, чтобы разрешить операциям $ sort выполнять запись во временные файлы.

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