ERP俱乐部
ERP爱好者、ERP从业者互相交流、互相学习的乐园;我们的愿景是成为全球一流的中文ERP(Enterprise Resource Planning)交流平台
网站首页 论坛首页 搜索 用户列表 FAQ 注册 登录  
ERP俱乐部 -> 数据库专栏 -> DB2数据库 -> MongoDB分布式存储的MapReduce并行查询
  MongoDB分布式存储的MapReduce并行查询
帖子发起人: 半神   发起时间: 2012-02-22 09:50 上午   回复数: 0
? 上一主题 下一主题 ?
楼主
  2012-02-22, 09:50 上午
半神 离线,最后访问时间: 2013/6/5 18:59:05 半神

发帖数前25位

超级管理员
职务: 超级管理员
80级
等级: 80级
注册: 2008年1月6日
区域: 华南
经验: 1,267
积分: 1,131
精华: 2
发贴: 590
排名: 26
Site AdministratorsGlobal ModeratorsSite ModeratorsSite Registered Users培训学员(MM学员服务区-北京200708班) 培训学员(FI学员服务区-深圳200805班) 每日发帖之星
MongoDB分布式存储的MapReduce并行查询
 
之前的文章中介绍了如何基于Mongodb进行关系型数据的分布式存储,有了存储就会牵扯到查询。虽然用普通的方式也可以进行查询,但今天要介绍的是如何使用MONGODB中提供的MapReduce功能进行查询。

  今天介绍如何基于sharding机制进行mapreduce查询。在MongoDB的官方文档中,这么一句话:

Sharded Environments
      In sharded environments, data processing of map
/reduce operations runs in parallel on all shards.

  即: map/reduce操作会并行运行在所有的shards上。

  下面我们就用之前这篇文章中白搭建的环境来构造mapreduce查询:

  首先要说的是,基于sharding的mapreduce与非sharding的数据在返回结构上有一些区别,我目前注意到的主要是不支持定制式的json格式的返回数据,也就是下面方式可能会出现问题:

  return { count : total };

  注意:上面的情况目前出现在了我的测试环境下,如下图:

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

  就需要改成 return count;

  下面是测试代码,首先是按帖子id来查询相应数量(基于分组查询实例方式):

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public partial class getfile : System.Web.UI.Page
    {

        
public Mongo Mongo { get; set; }

        
public IMongoDatabase DB
        {
            get
            {
                
return this.Mongo["dnt_mongodb"];
            }
        }

        
/// <summary>
        
/// Sets up the test environment.  You can either override this OnInit to add custom initialization.
        
/// </summary>
        
public virtual void Init()
        {
            string ConnectionString
= "Server=10.0.4.85:27017;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=512;MaximumPoolSize=51200;Pooled=true";
            
if (String.IsNullOrEmpty(ConnectionString))
                throw new ArgumentNullException("Connection string
not found.");
            this.Mongo
= new Mongo(ConnectionString);
            this.Mongo.Connect();        
        }
        string mapfunction
= "function(){\n" +
                        "  
if(this._id=='548111') { emit(this._id, 1); } \n" +  
                        "};";

        string reducefunction
= "function(key, current ){" +
                                "  
var count = 0;" +
                                "  
for(var i in current) {" +
                                "      
count+=current[i];" +
                                "   }"
+
                                "  
return count ;\n" +
                              "};";

      
        protected void Page_Load(object sender, EventArgs e)
        {
            Init();

            
var mrb = DB["posts1"].MapReduce();//attach_gfstream.files
            
int groupCount = 0;
            using (
var mr = mrb.Map(mapfunction).Reduce(reducefunction))
            {
                foreach (Document doc
in mr.Documents)
                {
                    groupCount
= int.P***(doc["value"].ToString());
                }
            }
            this.Mongo.Disconnect();
        }    
     }

开源时代的到来,对与技术人员是一个巨大的考验



QQ:876162454


分享按钮 IP 地址: 已登录   来自: 已登录    返回顶部
 第 1 页 总共 1 页 [共有 1 条记录]
ERP俱乐部 -> 数据库专栏 -> DB2数据库 -> MongoDB分布式存储的MapReduce并行查询
(C)Copyright 2005-2020 www.erpclub.org All Rights Reserved.
Tel:+86-755-26444630
Email:webmaster@yok.com.cn