2016-11-09 4 views
0

Ich verwende MongoDB 3.2 in einer Ruby on Rails-Anwendung mit Mongoid 5 (und dem MongoDB Ruby-Treiber). Die MongoDB-Instanz wird in einem Cluster mit Entwicklungschargen (1 Konfigurationsserver, 3 Shard-Server) auf einer einzelnen VM konfiguriert.MongoDB allowDiskUse im sharded Cluster

Ich erhielt den folgenden Fehler aus meiner Anwendung:

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

dies zu beheben, ich den Code geändert, um die allowDiskUse zu bieten: true Option. wenn wurde jedoch, dass aktiviert ist, erhalte ich dann den Fehler:

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

ich nichts sehen nicht ausdrücklich von MongoDB erwähnt, dass allowDiskUse in einer sharded Umgebung eingeschränkt werden würde (Referenzierung here und here).

Es war unklar, warum diese Einschränkung vorhanden ist (ich nehme an, dass es einen Grund gibt), oder wenn Problemumgehungen verfügbar sind.

Antwort

0

Dies endete mein Missverständnis und Fehler. Wie erwartet, war das Lesen der Fehlermeldung und die Beachtung von Details der Schlüssel. Die ursprüngliche Fehlermeldung stammt von einem Aggregatbefehl. Bei meinem ersten Versuch habe ich die Option "allowDiskUse" sehr blind auf alle MongoDB-Befehle angewendet, die meine Anwendung verwendete. Ich habe es zu Mapreduce-Befehlen hinzugefügt, die die allowDiskUse-Option nicht möchten. Was mich umgehauen hat, war, dass es in einer nicht-geschafften Umgebung gut funktioniert hat, aber das war eher der Zufall.

Wenn Sie "allowDiskUse" nur auf die Aggregatbefehle anwenden, funktioniert alles in einem einzigen Server und in einem sharded Setup.

Verwandte Themen