MongoDB实践七(数据库分片)

可扩展性 CPU | I/O
高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。
分片是MongoDB提供的一种机制,其可以将大型的集合分割保存到不同的服务器上。与其他的分区方案相比,MongoDB几乎能自动为我们完成所有事情。只要我们进行简单的配置,并告诉MongoDB要分配的数据,它就可以自动维护数据在不同服务器之间的平衡。同时根据需要增减服务器,MongoDB也会自动移动平移已有数据。
 
纵向扩展:增加更多的CPU和存储资源来扩展容量。
  • 增强单一服务器的性能
  • 简单的架构和运维模型
  • 单一服务器的性能上限
 
 
横向扩展:将数据集分布在多个服务器上。水平扩展即分片。
  • 增加提供服务的服务器数量
  • 更高的可扩展性
  • 增加架构和运维的复杂度
 
分片集群
  • 每个分片存储一部分数据,可以部署为复制集。
  • mongos路由就可以将客户请求发送至相关的分片。
  • 配置服务器保存集群配置和元数据,可以部署为复制集。
 
主分片
  • 集群中的每个数据库都会选择一个分片作为主分片。
  • 主分片存储所有不需要分片的集合。
  • 创建数据库时,数据最少的分片被选为主分片。
 
分片片键
  • 片键值被用来将集合中的文档划分为数据段。
  • 片键必须对应一个索引或索引前缀(单键或复合键)。
  • 可以使用片键值的哈希值来生成哈希片键。
 
选择片键
  • 片键值的范围更广(可使用复合片键扩大范围)
  • 片键值的分布更平衡(可使用复合片键平衡分布)
  • 片键值不要单向增大/减小(可使用哈希片键)
 
数据段分裂
  • 数据段尺寸过大或包含过多文档时触发数据段分裂。
  • 只有新增/更新文档时才可能自动触发数据段分裂。
  • 数据段分裂通过更新元数据来实现。
 
集群的平衡
  • 后台运行的平衡器负责监视和调整集群的平衡。
  • 当最大和最小分片之间的数据段数量相差过大时触发。
  • 集群中添加或移除分片时也会触发。
 
 
配置服务器(建议一定部署成一个复制集)
  • 存储各分片数据段列表和数据段范围
  • 存储集群的认证和授权配置
  • 不同的集群不要共用配置服务器
 
配置服务器(复制集情况下)
  • 主节点故障时,配置服务器进入只读模式。
  • 只读模式下,数据段分裂和集群平衡都不可执行。
  • 整个复制集故障时,分片集群不可用。
 
分片查询
  • 客户请求应发给,mongos,而不是分片服务器。
  • 当客户查询包含分片片键时,mongos将查询发送给指定分片。
  • 否则,mongos将查询发送到所有分片,并汇总所有查询结果。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

posted @ 2021-03-03 14:14  year12  阅读(154)  评论(0编辑  收藏  举报