2016-11-09 201 views
0

我在MongoDB 5(和MongoDB Ruby驱动程序)的Ruby on Rails应用程序中使用MongoDB 3.2。 MongoDB实例在运行在单个虚拟机上的开发分片群集(1个配置服务器,3个分片服务器)中配置。MongoDB allowDiskUse在分区集群

我是从我的应用程序收到以下错误:

{ $err: "Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.", code: 16945 } 

为了解决这个问题,我修改了代码,以提供allowDiskUse:真正的选项。但是,启用的时候,然后我收到错误:

Mongo::Error::OperationFailure: unknown m/r field for sharding: allowDiskUse() 

我没有看到那个的MongoDB将allowDiskUse在分片环境的限制特别提到什么(引用herehere)。

目前还不清楚为什么此限制已到位(我假设有一个原因),或者有任何解决方法可用。

回答

0

这最终是我的误解和错误。如预期的那样,阅读错误信息并注意细节是关键。原始错误消息来自聚合命令。在我的第一次尝试中,我非常盲目地将“allowDiskUse”选项应用于我的应用程序正在使用的所有MongoDB命令。我最终将其添加到mapreduce命令,它不需要allowDiskUse选项。扔在我这里的是在非分片环境中“工作”很好,但这更多的是侥幸。

通过将“allowDiskUse”应用于聚合命令,在单个服务器和分片设置中,一切工作正常。