MongoDB高级——数据库分片

本秂侑毒 提交于 2020-01-26 15:42:56

数据库分片

解决数据库的可扩展性

纵向扩展

  • 增强单一服务器的性能,增强CPU、增加内存…
  • 简单的架构和运维模型
  • 考验单一服务器的性能上线

横向扩展

  • 增加提供服务的服务器数量
  • 更高的可扩展性
  • 会增加架构和运维的复杂度

分片集群

主分片

  • 集群中的每个数据库都会选择一个分片作为主分片
  • 主分片存储所有不需要分片的集合
  • 创建数据库时,数据最少的分片被选为主分片

分片片键

那我们如何确定每篇文档应该被分配到哪个分片上呢,这个时候就需要用到分片片键

  • 片键值被用来将集合中的文档划分为数据段
  • 片键必须对应一个索引或索引前缀(单键或复合键均可)
  • 可以使用片键值的哈希值来生成哈希片键

如何合理的选择片键

  • 片键值的范围广(可使用复合片键扩大范围)
  • 片键值的分布更均衡(可使用复合片键平衡分布)
  • 片键不要单向增大/减小(可使用哈希片键)

数据段的分裂

随着用户的插入请求,单个分片的数据段也会变多扩大,如果数据段达到一定数值,则会自动触发数据段的分裂

  • 数据段尺寸过大或包含过多文档时触发数据段分裂
  • 只有新增/更新文档时才可能自动触发数据段分裂
  • 数据段分裂通过更新元数据来实现

集群的平衡

一个分片可能有多个数据段,上面提到数据段尺寸变大会触发数据段的分裂,假如说一个分片中分裂出的数据段过多,也会触发平衡机移动数据段到数据段少的分片,使各个分片中的数据均衡分配。

  • 后台运行的平衡器负责监视和调整集群的平衡
  • 当最大和最小分片之间的数据段数量相差过大时触发
  • 集群中添加或移除分片时也会触发

配置服务器

  • 存储各分片数据段列表和数据段范围
  • 存储集群的认证和授权配置
  • 不同的集群不要共用配置服务器
  • 主节点故障时,配置服务器进入只读模式
  • 只读模式下,数据段分裂和集群平衡都不可执行
  • 整个复制集故障时,分片集群不可用

分片查询

  • 客户请求应发给mongos,而不是分片服务器
  • 当查询包含分片片键时,mongos将查询分配到指定分片
  • 否则,mongos将查询发送到所有分片,并汇总所有查询结果
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!