我应该在产品环境中使用“allowDiskUse”选项吗?

时间:2016-06-14 07:23:51

标签: mongodb

当返回的doc在聚合中超过16MB时,我应该使用allowDiskUse选项吗?

或者我应该更改数据库结构或代码逻辑以避免限制? 'allowDiskUse'的优点和缺点是什么? 谢谢你的帮助。

她是我见过的官方文件: 结果大小限制

在版本2.6中更改。

从MongoDB 2.6开始,aggregate命令可以返回游标或将结果存储在集合中。返回游标或将结果存储在集合中时,结果集中的每个文档都受BSON文档大小限制,目前为16兆字节;如果任何单个文档超出BSON文档大小限制,该命令将产生错误。该限制仅适用于退回的文件;在管道处理过程中,文件可能超过这个尺寸。

内存限制¶

在版本2.6中更改。

管道阶段的RAM限制为100兆字节。如果某个阶段超过此限制,MongoDB将产生错误。要允许处理大型数据集,请使用allowDiskUse选项启用聚合管道阶段以将数据写入临时文件。 https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/

1 个答案:

答案 0 :(得分:8)

allowDiskUse与16MB结果大小限制无关。该设置控制是否管道步骤(如$ sort或$ group)可以使用一些临时磁盘空间,如果它们需要超过100MB的内存。理论上,对于任意管道,这可能是非常大量的磁盘空间。就个人而言,这从来都不是问题,但这取决于您的数据。

如果您的结果将超过16MB,那么您需要使用$ out管道阶段将数据输出到集合或使用管道API将光标返回到结果而不是内联返回所有数据(对于一些驱动程序这是一个单独的方法,对于其他驱动程序,它是一个传递给相同方法的标志。)