分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能力,对于开发者来说可以做到开箱即用。
为什么要使用分片?
MongoDB复制集实现了数据的多副本复制及高可用,但是一个复制集能承载的容量和负载是有限的。在你遇到下面的场景时,就需要考虑使用分片了:
- 存储容量需求超出单机的磁盘容量。
- 活跃的数据集超出单机内存容量,导致很多请求都要从磁盘读取数据,影响性能。
- 写IOPS超出单个MongoDB节点的写服务能力。
垂直扩容(Scale Up) VS 水平扩容(Scale Out):
- 垂直扩容 : 用更好的服务器,提高 CPU 处理核数、内存数、带宽等
- 水平扩容 : 将任务分配到多台计算机上
核心概念
数据分片
分片用于存储真正的数据,并提供最终的数据读写访问。分片仅仅是一个逻辑的概念,它可以是一个单独的mongod实例,也可以是一个复制集。下图中的Shard1、Shard2都是一个复制集分片。在生产环境中也一般会