MongoDB $ групповая операция - оптимизация использования памяти - PullRequest
0 голосов
/ 09 января 2019

Мне нужно выполнить $group операцию над всей моей коллекцией. Этот групповой этап достигает предела использования 100 МБ ОЗУ.

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

Я не ограничен оперативной памятью, но не смог найти, как увеличить этот предел использования памяти. Кто-нибудь знает, как настроить это ограничение?

Установка allowDiskUse в true решит решение, но я предполагаю, что вся операция будет намного медленнее, и я хотел бы найти лучшее решение.


{
    $group: {
        _id: {
            producer: "$producer",
            dataset:"$dataset",
            featureOfInterest:"$_id.featureOfInterest",
            observedProperty:"$_id.observedProperty"
        },
        documentId: {$push:"$documentId"}
    }
}

Эта операция $group выполняется над целыми сложными объектами (производитель и набор данных). Я понимаю, что эта операция является дорогой, поскольку «она требует сканирования всего набора результатов перед выдачей, и MongoDB должен будет по крайней мере сохранить указатель или индекс каждого элемента в группах». Я бы предпочел $group для полей uniqueId для обоих этих объектов.

Как я могу сгруппировать объект, используя уникальный идентификатор и $project весь объект впоследствии? Я хотел бы получить тот же результат, что и вышеописанная групповая операция, используя приведенную ниже групповую операцию в начале конвейера агрегации:

{
    $group: {
        _id: {
            producer: "$producer.producerId",
            dataset:"$dataset.datasetId",
            featureOfInterest:"$_id.featureOfInterest",
            observedProperty:"$_id.observedProperty"
        },
        documentId: {$push:"$documentId"}
    }
}

1 Ответ

0 голосов
/ 10 января 2019

allowDiskUse

В MongoDB нет возможности увеличить использование памяти более чем на 100 МБ в агрегациях, поэтому в тяжелых конвейерах вам необходимо установить флаг true .

Однако

Вам может быть интересно прочитать о MongoDB In-Memory Storage Engine

Пример запуска mongodb с механизмом хранения в памяти в командной строке

mongod --storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>

Больше информации в Mongodb Docs

https://docs.mongodb.com/manual/core/inmemory/

По второму вопросу - я его не понял. Пожалуйста, опубликуйте примеры документов.

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