MongoDB 聚集函数 16M 限制

2015-10-18 veryyoung 更多博文 » 博客 » GitHub »

原文链接 http://veryyoung.me/blog/2015/10/18/mongodb-aggregation-16m-limit.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


MongoDB 在使用类似 Group 之类的聚集函数的时候有个限制:返回结果不能超过 16M。

<!-- more -->


解决方案有三:

  1. 合理的设计,避免超过这个限制;
  2. 多次查询,切割数据,在程序中再组装;
  3. 使用 Map Reduce(同时执行多个 Map Reduce 任务需要把 MongoDB 升级到 2.4)。

例外 MongoDB 存储的单文档大小也不能超过 16M,这个限制是为了避免单个文档过大,完整读取时对内存或者网络带宽占用过高。

根据目前 MongoDB 主开发人员的意思,他们不打算放开这个限制,但会随着计算资源相对成本的降低(内存更便宜,网络更快)而适度调高。

按照 MongoDB 的设计思路来看, 这样的限制其实是有助于我们更改不良的数据库结构设计, 因为做查询时, 面对 16M 的文档, 查询起来相当慢, 这样的速度是不能够忍受的.

解决方案:

  1. 合理设计,比如分开存储。一般情况下不应该这么大的;
  2. 存储到 GridFS。