美文网首页
MongoDB分页获取数据排序阶段缓存溢出问题

MongoDB分页获取数据排序阶段缓存溢出问题

作者: 缄默_8421 | 来源:发表于2019-10-12 17:59 被阅读0次

问题描述:
MongoDB上按某字段进行分页排序查询,发现使用skip()方法跳过较大规模的数据时报错,无法得到查询结果。


一、错误再现

查询语法如下:

db.getCollection("log_collection").find().sort({
    "createTime": -1
}).limit(20).skip(85100)

报错信息如下:

[Error] Executor error during find command :: caused by :: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.
at line 0, column 0, Time: 0.173000s

二、问题原因

正如错误提示所说,即 MongoDB 排序阶段缓冲数据使用超出内部限制。


三、解决方案

1、 扩大排序内存的限制,例如扩大10倍至320M。如:

db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:335544320})

2、 给排序字段加索引。如:

db.getCollection("log_collection").createIndex({“createTime” : <1 or -1> })

3、 在执行一个更大规模排序时,即使已经加了索引依然超过限制,可以使用aggregate()方法的 allowDiskUse 参数设置将数据写到临时文件进行排序。如:

//语法:pipeline -> array, options -> document
db.collection.aggregate(pipeline, options)

//举例:
db.getCollection("log_collection").aggregate(
[
 {$sort : {"createTime" : -1}}
],
 {allowDiskUse: true}
);

四、总结与思考

使用方案3基本上能解决溢出的问题,但在数据规模异常庞大(TB、PB级)这种方案的有效性、适用性和实用性有待考证,是否可以考虑在 MongoDB 上“分库分表”,减少单集合的文档数量,或者选用其他 NoSQL 数据库?

相关文章

  • MongoDB分页获取数据排序阶段缓存溢出问题

    问题描述:MongoDB上按某字段进行分页排序查询,发现使用skip()方法跳过较大规模的数据时报错,无法得到查询...

  • mongodb——内存

    sort操作内存溢出 报错 这个异常出自mongodb的sort操作。当mongodb无法从索引获取排序顺序时,会...

  • Docker下mongodb容器查询数据量超过限制的解决办法

    问题:mongodb进行数据查询时报异常 主要异常信息 根据错误信息描述,发现是因为获取数据并排序时,所获取的数据...

  • MongoDB查询结果排序 --- 2022-04-03

    本章介绍,MongoDB查询结果排序,类似MYSQL order by的用法,MongoDB的分页查询通过Curs...

  • mysql-分页-遗漏数据问题

    Mysql - 分页- 数据遗漏问题 1.场景:通过分页查db中的内容,有遗落. 2.数据情况:排序的数据字段-有...

  • MySQL - 分页

    真分页/物理分页/数据库分页 优点:不会造成内存溢出 缺点:复杂,翻页比较麻烦

  • mongoDB排序

    问题 之前mongodb中的数据并不是很多,然后做排序没问题,后来数据多了之后,排序时报错.错误内容如下: 分析 ...

  • layui 使用心得

    1.关于layui中tablle 渲染数据后 sort排序问题 由于分页问题,这种排序很多时候不符合项目需求,根据...

  • 随笔 Java分页 以及前端angularjs 中的$uib

    Javaweb 分页主要有三个方法: 1 .前端分页。(获取所有数据) 2.Java分页。(获取所有数据)(3步:...

  • 像查询DB一样查询redis

    设计目的:希望查询redis缓存像查询数据库一样,支持多条件组合查询、模糊查询、区间查询、多字段排序查询、分页查询...

网友评论

      本文标题:MongoDB分页获取数据排序阶段缓存溢出问题

      本文链接:https://www.haomeiwen.com/subject/xjhcmctx.html