分片

黑派客     最近更新时间:2020-08-04 05:37:59

508

分片是一种在多台机器上存储数据记录的操作,它是 MongoDB 为应对数据增长需求而采取的办法。当数据量增长时,单台机器有可能无法存储数据或可接受的读取写入吞吐量。通过横向扩展,分片技术解决了这个问题。利用分片技术,我们可以添加更多的机器来应对数据量增加以及读写操作的要求。

为何要分片

  • 将所有的写入操作复制到主节点
  • 对延迟敏感的查询将在主节点上完成
  • 单个副本集的节点数限制为 12 个
  • 当活跃数据集过大时,内存有可能不够
  • 本地磁盘空间不足
  • 纵向扩展太过昂贵

MongoDB 中的分片

下图展示了 MongoDB 使用分片集群的情形:

sharding

在上图中,有三个组件值得说明:

  • 分片 分片用来存储数据。它们提供了高可用性与数据一致性。在生产环境中,每个分片都是一个独立的副本集。
  • 配置服务器 配置服务器(Config server)保存着集群的元数据。该数据含有集群数据集到分片的映射关系。查询路由使用该元数据来定位特定分片的操作。在生产环境中,分片集群具有 3 个配置服务器。
  • 查询路由 查询路由(Query Router)基本上就是 mongos 实例,是客户端的接口,直接操作适当的分片。查询路由定位并处理对分片的操作,并将结果返回至客户端。分片集群可能含有多个查询路由,以便分散客户端请求负载。一个客户端请求对应着一个查询路由。通常一个分片集群可能有很多查询路由。