为了账号安全,请及时绑定邮箱和手机立即绑定

Spring 中“排序超出内存限制”MongoDb 的问题

Spring 中“排序超出内存限制”MongoDb 的问题

ITMISS 2023-01-05 15:34:31
我正在编写一种使用 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 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您应该启用allowDiskUse选项。

默认情况下,排序操作有 100MB 的限制(在内存中),在您的操作中启用该选项将允许使用更大的大小。

来自MongoDB 的排序文档

$sort 阶段的 RAM 限制为 100 兆字节。默认情况下,如果阶段超过此限制,$sort 将产生错误。要允许处理大型数据集,请将 allowDiskUse 选项设置为 true 以启用 $sort 操作以写入临时文件。


查看完整回答
反对 回复 2023-01-05
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信