我希望有人可以帮助解决这个问题。谢谢!
我正在使用 MYSQL 的日志解析器。我为此任务使用 PHP5.310 来解析 mysql 日志并将收集到的信息存储到 mongodb 中,结构如下:
"_id" : "12345",
"Host" : "localhost",
"Connect" : "XXXXX@localhost on AUT_IND",
"Time_Con" : ISODate("2013-01-21T02:50:08Z"),
"Quit" : "Quit",
"Time_Quit" : ISODate("2013-01-21T02:50:09Z"),
"Num_Query" : 2,
"Query" : [
"SET NAMES utf8",
"SELECT * FROM XX
]
我试图在整个集合中获得前十名的查询。我用过这个 M/R:
function emit(k, v) {
print("emit");
print(" k:" + k + " v:" + tojson(v));
}
米=
function () {
this.Query.forEach(function (z) {emit(z, 1);});
}
r=
function (key, values) {
var total = 0;
for (var i in values) {
total += values[i];
}
return total;
}
}
并且 map reduce db.XXXXX.mapReduce(m,r,{out:"results"}) 给了我正确的结果,除非 Num_queries 高于 3k。
例如,我在这个集合中有一个带有“Num_Query”的文档:116287。
所以它有一个包含 116287 个查询的数组。当我做 M/R 时,我在这里得到了错误。
这里有错误日志:
2 月 8 日星期五 12:07:00 未捕获的异常:map reduce 失败:{“errmsg”:“异常:_id 不能是数组”,“code”:10099,“ok”:0 }
我希望有人能引导我找到正确的解决方案。非常感谢