Mongodb分片

什么是分片

分片,即在多个主机上处理数据。在mongodb,分片是把较大的数据集合分配到多个节点的mongodb进行存储

分片如何工作

当进行非常大量的数据读写时,硬件会成为瓶颈,会体现在CPU、内存、IO、磁盘等资源方面。
一般通过垂直扩展、水平扩展来达到缓和资源紧张的问题。 传统的垂直扩展,存在各种技术局限,而且也较为昂贵。 水平扩展通过将数据划分到多个服务器分布存储,来解决硬件资源瓶颈问题,并提供故障恢复。 但水平扩展增加了底层结构的复杂度。 mongodb通过sharding,即分片实现水平扩展。

  1. 分片基础
    Mongodb分片,涉及到3个主要组件:
    The shard :分片
    Mongos : 路由
    Config servers: 配置

  2. 分片(The Shard)
    分片可以是单实例、也可以是副本集。 一个分片只存储了一部分数据。 比如,一个2T的数据可以分在4个分片上,每个分片存储500G。

  3. 路由(mongos)
    mongos作为应用与分片的交互界面,它负责将客户端的请求分发给正确的分片,来实现数据的读写等操作。 路由可以是多个,但路由之间没有关系。

  4. 配置(Config servers)
    配置节点即用来存储配置,包括元数据和集群配置等。 注意配置节点一般也是副本集。

  5. 分片索引
    mongodb通过分片索引将集合的数据进行分布处理。 分片索引可以是单个字段,也可以是多个字段组成。
    注意分片索引一旦创建是不能修改的。因此选择合适的分片索引是非常重要的。一般创建分片索引,遵循两个原则:

  • 数据schema
  • 检索方式 ,即检索会涉及到哪些条件
  1. chunks
    分片的更小数据集是chunks, 每个chunk基于分片索引(左关右开)管理数据。monogo通过balancer负责chunk数据的分布。
    balancer以后台服务方式运行,将所有分片上的chunk进行均衡处理。

优劣

  • 优:
    相较于传统的副本集方式,数据可以从多个节点进行读写;
    可以通过横向扩展增加存储,内存等分散压力;
    发生节点故障时,正常节点依然可以提供服务

  • 劣:
    慎重选择分片索引。
    分片后不可逆(只能通过导出导入)。
    分片索引直接影响集群的性能。
    当某个检索没有匹配的shard时,会查询所有的shard,导致检索异常慢。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐