MongoDB之分片集群(Sharding)
一、基本概念
分片(sharding)是一个通过多台机器分配数据的方法。MongoDB使用分片支持大数据集和高吞吐量的操作。大数据集和高吞吐量的数据库系统挑战着单一服务的性能。例如:高查询率将耗尽CPU的性能。大于系统RAM的工作集将给磁盘的IO很大的压力。
应对系统的增长有两个方法:垂直扩展和水平扩展。
垂直扩展的方法是提升单一服务的性能,例如:使用一个更强的CPU,或更多的内存,或提升大量的存储空间。可用技术的局限性将限制单一服务的工作负载。另外基于云的提供者也有硬件配置的上限。所以,垂直扩展是有上限的。
水平扩展的方法是将系统的数据集分配到多个服务上,添加额外的服务可以提升系统的能力。一个单独机器的性能和速度可以不是很高,每台机器处理整个工作负载的一个子集,潜在地相比一个单一的高速度、高性能的服务,提供了更好的性能。扩展部署的能力仅仅需要添加额外的需要的服务,这比添加高档的硬件要便宜不少。
1.1分片集群
MongoDB 的分片集群由下面的几个组件组成:
分片(shard):每个分片包含了分片数据的一个子集,每个分片可以作为一个副本集部署。
mongos:mongos扮演者查询路由的角色,提供着客户端应用和分片集群的接口。
config servers:配置服务存储着集群的元数据和配置设置,MongoDB3.4以后,配置服务必须部署成副本集。
下图描述了分片集群中,各个组件的交互
image1
mongodb在collection级别对数