MongoDB 聚集函数 16M 限制
原文链接 http://veryyoung.me/blog/2015/10/18/mongodb-aggregation-16m-limit.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
MongoDB 在使用类似 Group 之类的聚集函数的时候有个限制:返回结果不能超过 16M。
<!-- more -->
解决方案有三:
- 合理的设计,避免超过这个限制;
- 多次查询,切割数据,在程序中再组装;
- 使用 Map Reduce(同时执行多个 Map Reduce 任务需要把 MongoDB 升级到 2.4)。
例外 MongoDB 存储的单文档大小也不能超过 16M,这个限制是为了避免单个文档过大,完整读取时对内存或者网络带宽占用过高。
根据目前 MongoDB 主开发人员的意思,他们不打算放开这个限制,但会随着计算资源相对成本的降低(内存更便宜,网络更快)而适度调高。
按照 MongoDB 的设计思路来看, 这样的限制其实是有助于我们更改不良的数据库结构设计, 因为做查询时, 面对 16M 的文档, 查询起来相当慢, 这样的速度是不能够忍受的.
解决方案:
- 合理设计,比如分开存储。一般情况下不应该这么大的;
- 存储到 GridFS。