• mongoDB
  • 在MongoDB中,分片(Sharding) 是一种将大型数据集拆分到多个独立服务器(或集群)的技术,用于解决单台服务器存储容量不足、性能瓶颈等问题,实现水平扩展。

核心目的

  • 分散数据存储压力:将海量数据拆分到多个“分片”(存储节点),避免单节点存储过载。
  • 提升处理能力:让读写请求分散到不同分片,提高系统吞吐量和响应速度。

分片的关键组件

  1. 分片(Shard) 实际存储数据的节点(可是单个MongoDB实例或副本集),每个分片存储数据集的一部分。
  2. 配置服务器(Config Server) 存储整个分片集群的元数据(如数据分片规则、分片位置等),确保集群各组件协同工作。通常以副本集形式部署,保证高可用。
  3. mongos路由 客户端与分片集群的入口,负责将客户端请求根据分片规则路由到对应的分片,并汇总结果返回给客户端。客户端无需关心数据具体存在哪个分片。

分片的工作原理

  1. 选择分片键(Shard Key) 需指定一个或多个字段作为分片键,用于决定数据如何分配到不同分片。例如,对“用户表”按“地区”字段分片,北京的用户数据存到分片1,上海的存到分片2。
  2. 数据拆分方式
    • 范围分片:按分片键的范围划分数据(如数值型字段按0-100、101-200等范围分配)。
    • 哈希分片:对分片键进行哈希计算,将结果均匀分配到不同分片,适合数据分布不均匀的场景。
  3. 路由与查询 客户端通过mongos发送请求,mongos根据配置服务器的元数据和分片键,定位数据所在的分片,将请求转发到对应分片处理,最后整合结果返回。

适用场景

  • 数据量增长迅速,单节点存储容量不足。
  • 读写请求频繁,单节点处理能力达到瓶颈。
  • 希望系统具备水平扩展能力,通过增加分片节点提升性能。

通过分片,MongoDB可支持TB甚至PB级别的数据存储,同时保持高效的读写性能。