一、分片
1)介绍
(1)MongoDB中的集群(分片、复制(副本集)技术)。
(2)分片(Sharding):数据拆分,将其分散存放在不同的机器上的过程。
(3)分片技术对大数据集和高吞吐量操作提供很好的部署。
集合分片图:
2)分片实现基本原理
(1)分片集群组件构成
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。
示例:
方式二:(在指定的数据库集合里设置分片)
示例:
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)
2、范围分片(Ranged Sharding)
3、分区分片