在server端定义了一个函数somefunc,把mapreduce的结果从 _id , value 的形式 flatten 展开
db.system.js.save({
_id : 'somefunc',
value : function(src_mr, dst_name){
d = db.createCollection(dst_name);
var src = db[src_mr];
var d = src.find();
var dst = db[dst_name];
while (d.hasNext()) {
var r =d.next();
var x = r._id;
x.value = r.value;
// some modify on x ....
dst.insert(x);
}
}
});
在客户端执行运算:
db.loadServerScripts();
somefunc('srcmr', 'dstmr');
会把srcmr的数据传回客户端,在客户端的机器算好了,再远程写入mongodb server,抓包可以看到网络流量较大。
在server端执行运算:
db.eval("somefunc('srcmr', 'dstmr');");
不会把数据传回客户端,而是在服务端mongdb进行计算,直接写入,抓包可以看到网络流量很小。
因此,可以在客户端调试小规模数据,实际应用时在server端db.eval执行。
没有评论:
发表评论