2016-11-09 202 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」應用於聚合命令,在單個服務器和分片設置中,一切工作正常。