1

私のサンプルJsonオブジェクトは次のとおりです

{
    "numRecommenders": 0,
    "publicProfileUrl": "http://www.linkedin.com/pub/heena-vyas/16/786/826",
    "positions": {
        "total": 1,
        "positionList": [
            {
                "id": "91286566",
                "title": "senior executive",
                "company": {
                    "name": "Reliance",
                    "industry": "Oil & Energy",
                    "type": "Public Company",
                    "size": "10,001+ employees"
                },
                "isCurrent": true
            }
        ]
    },

私のmapreduce関数は以下のとおりです。

String map = "function() {"
                 +"for (index in this.positions.positionList) {"
                        +"emit(this.positions.positionList[index].company.name, {count: 1});"
                   +"}}";

        String reduce = "function(key, values) {" + "var sum = 0;"
                + "values.forEach(function(value) {" + "sum += value['count'];"
                + "});" + "return {count: sum};" + "};";

        MapReduceCommand mapReduceCommand = new MapReduceCommand(
                mongoCollection, map, reduce.toString(), null,
                MapReduceCommand.OutputType.INLINE, null);

        MapReduceOutput out = mongoCollection.mapReduce(mapReduceCommand);

しかし、現在、mongoDbの150万個のオブジェクトを使用しています。

次の例外が発生します。

スレッド"main"の例外com.mongodb.CommandResult$CommandFailure:コマンドが失敗しました[コマンドが失敗しました[mapreduce] {"assertion":"メモリ内のデータが多すぎますmap/ reduce"、 "assertionCode":13604、 "errmsg": " dbアサーションの失敗"、" ok ":0.0} at com.mongodb.CommandResult.getException(CommandResult.java:70)at com.mongodb.CommandResult.throwOnError(CommandResult.java:116)at com.mongodb.DBCollection.mapReduce( DBCollection.java:961)com.mongo.dboperations.MongoStorage.runGroupCommand(MongoStorage.java:126)

com.mongo.dboperations.MongoStorage.main(MongoStorage.java:218)で

この例外を解決するにはどうすればよいですか?

4

1 に答える 1

1

出力が16MBの制限内に収まる場合、MongoDBでのmap/reduceのインライン出力が最速のオプションです。それを超えて、コレクションに出力する必要があります。

于 2012-04-14T21:24:27.020 に答える