- mongoDB
- 在MongoDB中,分片(Sharding) 是一种将大型数据集拆分到多个独立服务器(或集群)的技术,用于解决单台服务器存储容量不足、性能瓶颈等问题,实现水平扩展。
核心目的
- 分散数据存储压力:将海量数据拆分到多个“分片”(存储节点),避免单节点存储过载。
- 提升处理能力:让读写请求分散到不同分片,提高系统吞吐量和响应速度。
分片的关键组件
- 分片(Shard) 实际存储数据的节点(可是单个MongoDB实例或副本集),每个分片存储数据集的一部分。
- 配置服务器(Config Server) 存储整个分片集群的元数据(如数据分片规则、分片位置等),确保集群各组件协同工作。通常以副本集形式部署,保证高可用。
- mongos路由 客户端与分片集群的入口,负责将客户端请求根据分片规则路由到对应的分片,并汇总结果返回给客户端。客户端无需关心数据具体存在哪个分片。
分片的工作原理
- 选择分片键(Shard Key) 需指定一个或多个字段作为分片键,用于决定数据如何分配到不同分片。例如,对“用户表”按“地区”字段分片,北京的用户数据存到分片1,上海的存到分片2。
- 数据拆分方式
- 范围分片:按分片键的范围划分数据(如数值型字段按0-100、101-200等范围分配)。
- 哈希分片:对分片键进行哈希计算,将结果均匀分配到不同分片,适合数据分布不均匀的场景。
- 路由与查询 客户端通过mongos发送请求,mongos根据配置服务器的元数据和分片键,定位数据所在的分片,将请求转发到对应分片处理,最后整合结果返回。
适用场景
- 数据量增长迅速,单节点存储容量不足。
- 读写请求频繁,单节点处理能力达到瓶颈。
- 希望系统具备水平扩展能力,通过增加分片节点提升性能。
通过分片,MongoDB可支持TB甚至PB级别的数据存储,同时保持高效的读写性能。