2011-10-18 14 views
0

パフォーマンスログを管理するためにmongoDbをテストしようとしています。 MapReduceとMongoDbの日付でグルーピング

は、このテストのために私は今、私は一日で平均ロード時間を取得できるようにしたいと思い、次の形式

{ "_id" : ObjectId("4e9d3cc4621dc1dc11000000"), "date" : "Thu Oct 13 2011 15:37:21 GMT+0200 (CEST)", "loadtime" : 0.07, "msg" : "Lorem ipsum message" } 

を使用して、コレクション内の10Mの行を挿入します。

私が理解したところでは、MapReduceを2回実行する必要があります。

最初のものは、日のコレクションを作成することです。

だから私はhttp://cookbook.mongodb.org/patterns/unique_items_map_reduce/

に参照のうえしかし、これは、数秒後に私のMongoDBサーバーを殺す

map = function() { 
    day = Date.UTC(this.date.getFullYear(), this.date.getMonth(), this.date.getDate()); 

    emit({day: day}, {count: 1}); 
} 

reduce = function(key, values) { 
    var count = 0; 

    values.forEach(function(v) { 
    count += v['count']; 
    }); 

    return {count: count}; 
} 

を試してみました。ここで

db.loadTime.mapReduce(map, reduce, {out: 'days'}); 
Tue Oct 18 11:57:28 query failed : test.$cmd { mapreduce: "loadTime", map: function() { 
    day = Date.UTC(this.date.getFullYear(), this.date.ge..., reduce: function (key, values) { 
    var count = 0; 
    values.forEach(functio..., out: "days" } to: 127.0.0.1 
Tue Oct 18 11:57:28 Error: error doing query: failed (anon):1509 

私のエラーログ

Tue Oct 18 11:56:08 [conn1] CMD: drop test.tmp.mr.mapreduce_1318931768_1_inc 
     55800/10000000 0% 
     112800/10000000 1% 
     171400/10000000 1% 
     229600/10000000 2% 
     288600/10000000 2% 
     345600/10000000 3% 
     404100/10000000 4% 
     462900/10000000 4% 
     522000/10000000 5% 
     579100/10000000 5% 
     629200/10000000 6% 
     677000/10000000 6% 
     724200/10000000 7% 
     767500/10000000 7% 
     818600/10000000 8% 
     864300/10000000 8% 
     921300/10000000 9% 
     972200/10000000 9% 
     1021600/10000000 10% 
     1070700/10000000 10% 
     1115600/10000000 11% 
     1163600/10000000 11% 
     1217400/10000000 12% 
     1269100/10000000 12% 
     1313300/10000000 13% 
     1366200/10000000 13% 
Tue Oct 18 11:57:28 Got signal: 11 (Segmentation fault). 

Tue Oct 18 11:57:28 Backtrace: 
0x843a16d 0x842dbcd 0x741400 0x1eadcd 
/usr/lib/mongodb/mongod(_ZN5mongo15printStackTraceERSo+0x2d) [0x843a16d] 
/usr/lib/mongodb/mongod(_ZN5mongo10abruptQuitEi+0x3ed) [0x842dbcd] 
[0x741400] 
/usr/lib/xulrunner-2.0/libmozjs.so(+0xdadcd) [0x1eadcd] 

は、私は正しい方向に向かっアムれますか?

答えて

4

私も同じ問題があり、以下のように解決します。

代わりの

values.forEach(function(v) { 
    count += v['count']; 
}); 

使用

for(v in values){ 
    count += v['count']; 
}