技术开发 频道

MongoDB分布式存储的MapReduce并行查询

  下面是运行时的查询结果,如下:

MongoDB分布式存储的MapReduce并行查询

  接着演示一下如何把查询到的帖子信息返回并装入list集合,这里只查询ID为548110和548111两个帖子:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        string mapfunction = "function(){\n" +
                        "  if(this._id=='548110'|| this._id=='548111') { emit(this, 1); } \n" +    
                        "};";

        string reducefunction
= "function(doc, current ){" +
                                "  
return doc;\n" +
                               "};";
      
        protected void Page_Load(object sender, EventArgs e)
        {
            Init();

            
var mrb = DB["posts1"].MapReduce();//attach_gfstream.files
            List
<Document> postDoc = new List<Document>();
            using (
var mr = mrb.Map(mapfunction).Reduce(reducefunction))
            {
                foreach (Document doc
in mr.Documents)
                {
                    postDoc.
Add((Document)doc["value"]);
                }
            }
            this.Mongo.Disconnect();
        }

  下面是运行时的查询结果,如下:

MongoDB分布式存储的MapReduce并行查询

  上面的map/reduce方法还有许多写法,如果大家感兴趣可以看一下如下这些链接:

  http://cookbook.mongodb.org/patterns/unique_items_map_reduce/

  http://www.mongodb.org/display/DOCS/MapReduce

  以及之前我写的这篇文章:http://www.cnblogs.com/daizhj/archive/2010/06/10/1755761.html

  当然在mongos进行map/reduce运算时,会生成一些临时文件,如下图:

MongoDB分布式存储的MapReduce并行查询

  我猜这些临时文件可能会对再次查询系统时的性能有一些提升(但目前未观察到)。

  当然对于mongodb的gridfs系统(可使用它搭建分布式文件存储系统,我之前在这篇文章中已介绍过,我也做了测试,但遗憾的是并未成功,它经常会报一些错误,比如:

  Thu Sep 09 12:09:29 Assertion failure _grab client\parallel.cpp 461

  看来mapreduce程序链接到mongodb上时,会产生一些问题,但不知道是不是其自身稳定性的原因,还是我的机器环境设置问题(内存或配置的64位系统mongos与32位的client连接问题)。

0
相关文章