数据库分片
解决数据库的可扩展性
。
纵向扩展
- 增强单一服务器的性能,增强CPU、增加内存…
- 简单的架构和运维模型
- 考验单一服务器的性能上线
横向扩展
- 增加提供服务的服务器数量
- 更高的可扩展性
- 会增加架构和运维的复杂度
分片集群
主分片
- 集群中的每个数据库都会选择一个分片作为主分片
- 主分片
存储所有不需要分片的集合
- 创建数据库时,数据最少的分片被选为主分片
分片片键
那我们如何确定每篇文档应该被分配到哪个分片上呢,这个时候就需要用到分片片键。
- 片键值被用来
将集合中的文档划分
为数据段 - 片键必须对应一个
索引或索引前缀
(单键或复合键均可) - 可以使用片键值的哈希值来生成哈希片键
如何合理的选择片键
- 片键值的
范围广
(可使用复合片键扩大范围) - 片键值的
分布更均衡
(可使用复合片键平衡分布) - 片键
不要单向增大/减小
(可使用哈希片键)
数据段的分裂
随着用户的插入请求,单个分片的数据段也会变多扩大,如果数据段达到一定数值,则会自动触发数据段的分裂。
- 数据段尺寸过大或包含过多文档时触发数据段分裂
- 只有
新增/更新文档
时才可能自动触发数据段分裂 - 数据段分裂通过更新
元数据
来实现
集群的平衡
一个分片可能有多个数据段,上面提到数据段尺寸变大会触发数据段的分裂,假如说一个分片中分裂出的数据段过多,也会触发平衡机移动数据段到数据段少的分片,使各个分片中的数据均衡分配。
- 后台运行的平衡器
负责监视和调整集群的平衡
- 当最大和最小分片之间的数据段数量
相差过大时
触发 - 集群中
添加或移除分片时
也会触发
配置服务器
- 存储各分片数据段列表和数据段范围
- 存储集群的认证和授权配置
- 不同的集群不要共用配置服务器
- 主节点故障时,配置服务器进入只读模式
- 只读模式下,数据段分裂和集群平衡都不可执行
- 整个复制集故障时,分片集群不可用
分片查询
- 客户请求应发给mongos,而不是分片服务器
- 当查询包含分片片键时,mongos将查询分配到
指定分片
- 否则,mongos将查询发送到
所有分片
,并汇总所有查询结果
来源:CSDN
作者:木兮同学
链接:https://blog.csdn.net/qq_36221788/article/details/103625026