天天看点

MongoDB学习(十一)之分片(Sharding)

一、分片

  1)介绍

     (1)MongoDB中的集群(分片、复制(副本集)技术)。

    (2)分片(Sharding):数据拆分,将其分散存放在不同的机器上的过程。

    (3)分片技术对大数据集和高吞吐量操作提供很好的部署。

                集合分片图:

MongoDB学习(十一)之分片(Sharding)

  2)分片实现基本原理

    (1)分片集群组件构成

MongoDB学习(十一)之分片(Sharding)

           1、图片说明:

                 ①Shard(分片):一个集合可以被分为若干个分片(每个分片可以部署为副本集)。

                 ②Mongos(路由器(Router)):作为查询路由器,提供用户端应用程序和分片集群之间的。

              ③Config Servers(配置服务):配置服务存储集群的元数据和配置设置,配置服务必须部署为副本集(replica set),运行WiredTiger存储引擎,才能将配置服务器部署为副本集。

                 ④分片键(Shard  Key):通过分片键来把集合文档分片存储到各个分片服务器之中(唯一键,区分不同的分片)。

             ⑤块(Chunk):集合文档分割成块(默认大小为64MB),每块带有唯一性的分片键,通过分片集群平衡器(Balancer)实现不同服务器上的数据均衡块存储。

                      a)设置块(Chunk)的大小:

                               方式一:

                                 先要切换到配置数据库(命令:use  config)

                                 语法:                  

db.settings.save({_id:"chunksize",value:<sizeInMB>})
           

                                 语法说明:

                                            db:实际数据库实例。

                                            <sizeInMB>:新设置的块值,范围1~1024MB。

                                示例:

MongoDB学习(十一)之分片(Sharding)

                          方式二:(在指定的数据库集合里设置分片)

                              示例:

sh.shardCollection("user.col",
                    {
                      last_name:1
                    },
                      false,
                    {
                      numInitialChunks:5,collation:{locale:"simple"}
                    }
  )
           

                     参数说明:

                          user:数据库名。

                          col:需要分片的集合名。

                          false:强制执行唯一索引。

                          numInitialChunks:分片包含的初始块数量。

                          collation:{locale:"simple"}:默认的英语字符串内容。

         2、注意:①建议一个副本集(replica set)至少配置三台服务器(防止主机单点故障)。

                         ②Mongos实例通过跟中config服务器上的分片元数据(描述存放分片数据的服务器位置等数据信息)来确定用户需要访问哪个分片服务器,为不同访问用户的读、写操作提供了数据访问统一接口。

                          ③每个分片服务器上有若干个不同集合的分片。

                          ④分片键存在于集合中每个文档的索引字段或索引复合字段。                         

                          ⑤允许设置块大小,块自动拆分发生在insert或update这两个操作上。

                          ⑥分块大小应该合理,太小,导致拆分需要更多的时间,查询汇总(游标)会需要更多时间;

                                                             太大,在不同服务器分布可能不均匀。

                          ⑦一个分片最多设置8192个数据块。   

     (2)分片算法(三种)

               1、哈希分片(Hashed Sharding)

MongoDB学习(十一)之分片(Sharding)

            2、范围分片(Ranged Sharding)

MongoDB学习(十一)之分片(Sharding)

             3、分区分片

MongoDB学习(十一)之分片(Sharding)