MongoDB $ group操作-内存使用优化

时间:2019-01-09 14:27:46

标签: mongodb mongodb-query aggregation-framework spring-data-mongodb

我需要对我的整个收藏集执行$group操作。该小组阶段已达到100MB RAM使用量的上限。

  

$ group阶段的RAM限制为100 MB。默认情况下,如果阶段超出此限制,则$ group将产生错误。但是,要允许处理大型数据集,请将allowDiskUse选项设置为true以使$ group操作能够写入临时文件。

我不受RAM的限制,但是找不到增加内存使用限制的方法。 有人知道如何配置此限制吗?

allowDiskUse设置为true可以解决该问题,但是我认为整个操作会慢很多,我想找到一个更好的解决方案。


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

$group操作是对整个复杂对象(生产者和数据集)执行的。我知道此操作非常昂贵,因为“它需要在产生前先扫描整个结果集,而MongoDB将必须至少存储组中每个元素的指针或索引”。我宁愿$group在这两个对象的uniqueId字段上。

我如何才能使用唯一ID将对象$ group,然后$project整个对象呢? 我想在聚合管道的开头使用下面的group操作获得与上面的group操作相同的结果:

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

1 个答案:

答案 0 :(得分:1)

allowDiskUse

在MongoDB中,没有选择将聚合中的内存使用量增加到100mb以上,因此在繁重的管道中,因此您必须将标志设置为 true

但是

您可能对 MongoDB内存中存储引擎

感兴趣

示例在命令行中使用内存存储引擎启动mongodb

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

Mongodb文档中的更多信息

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

关于第二个问题-我不明白。请发布示例文档。