您的位置:首页 > 数据库 > Mongodb

mongoDB——自动分片介绍及简单实现

2017-03-07 10:23 295 查看
分片,是指将数据拆分,将其分散到不同的机器上。这样的好处就是,不需要功能强大的大型计算机也可以存储更多的数据,处理更大的负载。

      mongoDB的分片,是将collection的数据进行分割,然后将不同的部分分别存储到不同的机器上。当collection所占空间过大时,我们需要增加一台新的机器,分片会自动将collection的数据分发到新的机器上。

     
      MongoDB分片的原理:
      


       mongos:客户端只需要对mongos进行操作就行了,至于如何进行分片,不需要客户端参与,由mongos和config来完成。
       mongod:一个普通的数据库实例,如果不分片的话,我们直接连接的就是mongod。
    

        实例演示:
       首先准备四个mongodb服务器,F:\mongos\     F:\mongodb1    F:\mongodb2   F:\mongodbConfig
       1. 开启config服务器
        因为mongos要把mongod之间的配置放到config服务器里面,所以,首先应该开启config服务器。
        


       2. 开启mongos服务器
         在开启mongos时,指定config服务器。
       


       

      3. 开启mongod1,mongod2服务器,对于分片来说,也就是要添加片了。
        

  

        


      4. 将27022和27023两台服务器交给mongos管理
      runCommand执行添加分片
        


     下一步就是设置片键,也就是告诉mongos如何切分数据。首先用enablesharding()开启数据库分片功能,然后指定集合中分片的键。
        


      5. 执行数据,查看效果
        通过mongos向数据库中插入10w条数据,通过printShardingStatus命令查看mongodb的数据分布情况。
        


      shards:已分为了两个片shard0000,shard0001
      databases:显示admin未分片,test数据已分片,对user这个集合进行了分片,片键为name。
      chunks:显示user集合被分成三块:从无穷小到0,从0到9999,从9999-maskey。

     分片机制增强了mongoDB的写扩展性。使用分片机制能够很好的解决下面几个问题:

     存储的数据接近或者超过一个单独节点的存储能力。
     系统有效工作集的大小将要超过系统的最大RAM
     系统有大量的写操作。
     在之前介绍RDBNS和NoSql时,曾经说过,RDBMS并不擅长大数据量的写入处理,因为数据之间存在关联,为了进行join处理,RDBMS不得不把数据存储在同一个服务器内,这样不利于数据的分散。而非关系型数据,原本就不支持join处理,各个数据之间是独立设计的,很容易将数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也是很容易的。

文章出处:http://blog.csdn.net/liusong0605/article/details/11556311
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nosql mongodb