MongoDB

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

分片,是指将数据拆分,将其分散到不同的机器上。这样的好处就是,不需要功能强大的大型计算机也可以存储更多的数据,处理更大的负载。
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处理,各个数据之间是独立设计的,很容易将数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也是很容易的。