上一篇:MongoDB(10)— 副本集选举主节点原理
1.什么是分片?
在一个采石场上采了一块非常大的石头,现在需要把石头带到某个地方,但是一个车又放不下,所以就将这个石头拆分成多块。这样就不需要找一个特大号的车了,直接使用普通渣土车也可以将它拉回去。
这里的分片实际上和上面的例子差不多,分片就是跨多台机器分布数据的方法,MongoDB使用采取分片技术来支持庞大的数据集的存储和高吞吐量操作的部署,使我们不需要高配置、功能强大的计算机就可以存储更多的数据,处理更多的负载。MongoDB使用分片技术进行水平扩展。
2.分片集群包含的3大组件?
-
分片(存储):
每个分片包含分片数据的子集。每个分片都可以部署为副本集。 -
mongos(路由):
mongos充当查询路由器。因为数据被分到了不同的分片上,使用mongos可以知道我们要查询的数据被分到了哪个分片上。 -
config services (调度的配置):
配置服务器存储集群的元数据和配置(包括权限认证相关)。从 MongoDB 3.4 开始,必须将配置服务器部署为副本集(CSRS,全称是 Config Servers Replica Set)。
下图描述了三大组件之间的交互:(MongoDB官方文档)
MongoDB在集合的层级上对数据进行分片,然后将集合数据分布到集群中的分片上进行存储。
3.分片的好处?
1.分摊读写压力
分片之后,我们将数据分布到更多的分片上进行存储,这样我们在读写数据的时候,允许每个分片处理集群操作的子集。通过添加更多的分片来进行水平扩展,分散读写压力,提高负载。
2.扩大存储容量
将数据分散到多个分片上进行存储之后,单个分片能节省更多的空间去存储更多的数据,整个分片集群的存储容量随之增加。
3.高可用
即使无法访问不可用的分片的数据,但是针对于可用分片依然可以成功读写分片上的数据子集。