当返回的文档聚合超过16MB限制时,我应该使用allowDiskUse选项吗?
还是应该更改数据库结构或代码逻辑来避免限制?
“ allowDiskUse”的优缺点是什么?
谢谢你的帮助。
她是我见过的官方文件:
结果大小限制
在2.6版中进行了更改。
从MongoDB 2.6开始,aggregate命令可以返回游标或将结果存储在集合中。返回游标或将结果存储在集合中时,结果集中的每个文档都受BSON文档大小限制(当前为16兆字节);如果任何单个文档超出BSON文档大小限制,该命令将产生错误。该限制仅适用于退回的文件;在管道处理过程中,文档可能会超出此大小。
内存限制
在2.6版中进行了更改。
流水线阶段的RAM限制为100 MB。如果阶段超出此限制,则MongoDB将产生错误。要允许处理大型数据集,请使用allowDiskUse选项启用聚合管道阶段以将数据写入临时文件。
https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/
最佳答案
allowDiskUse
与16MB结果大小限制无关。该设置控制管道步骤(例如$ sort或$ group)是否需要一些临时磁盘空间(如果它们需要超过100MB的内存)。理论上,对于任意管道,这可能是非常大量的磁盘空间。就个人而言,这从来都不是问题,但这将取决于您的数据。
如果结果将超过16MB,则需要使用$ out流水线阶段将数据输出到集合中,或者使用流水线API将游标返回结果,而不是直接返回所有数据(对于某些驱动程序,这是是一个单独的方法,对于其他方法则是传递给同一方法的标志)。
关于mongodb - 我应该在产品环境中使用“allowDiskUse”选项吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44193796/