分片也称分区,是对服务存储进行水平扩展的一种能力。类似于分表,不同的是mongoDB本身支持对分片的管理,可以做到开箱即用
为什么要分片
- 单机硬盘容量不足以支撑应用数据
- 活跃的数据量大于单机内存,导致内存数据无效,反复从硬盘加载,严重影响性能
- IOPS超出单机mongoDB的服务能力
分片的配置
- mongos 进程直接部署即可
- 配置中心 副本集方式配置
- 数据存储 可单成员副本集、可单服务器、可多成员副本集
以上可见,分片的配置是基于副本集配置,因此可参考 - 副本集配置篇。
另外注意:
1、一台mongos、两台配置中心、两台单机版分片mongoDB总共五台服务器。注意整体mongoDB版本保持一致;
2、在开始构建分片时,对每台mongoDB 关闭认证功能。等分片构建结束,进行权限认证。
数据路由与存储规则
分片算法
- 范围分片
- hash分片
- 随机分片
- 位置分片
分片关注点
- 一个文档仅仅属于一个块,所以数组不能作为片键
- 片键应该基于一个会发生变化的值,而不是枚举类;