在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执行。
没有评论:
发表评论