MongoDB - 分片
MongoDB - 分片
Section titled “MongoDB - 分片”分片是 MongoDB 实现横向扩展的方法。它是一个将数据分布到多台机器(或服务器)上的过程,旨在支持具有超大数据集和高吞吐量操作的应用程序。随着数据量和工作负载的增长,单台机器可能会受到其 CPU、RAM 或磁盘 I/O 容量的限制。分片通过在服务器集群中划分数据来克服这些限制。
为什么要分片?
Section titled “为什么要分片?”当您的应用程序面临单个副本集(纵向扩展)的限制时,您应该考虑分片:
- 存储容量:您的数据集大小超过了单个服务器的可用磁盘空间。
- 内存限制:您的工作集(最常访问的数据和索引)太大,无法完全载入单个服务器的 RAM 中,导致因磁盘访问而性能缓慢。
- 读写吞吐量:您的应用程序的写入或读取量超出了单台机器的 I/O 容量。
- 成本效益:通过增加更多通用服务器进行横向扩展,可能比购买单个、极其强大的服务器进行纵向扩展更具成本效益。
分片集群架构
Section titled “分片集群架构”MongoDB 分片集群由三个主要组件组成:
- 分片(Shards):每个分片存储总数据的一个子集。为了实现高可用性和数据冗余,生产环境中的每个分片必须是一个副本集。
- 配置服务器(Config Servers):配置服务器存储集群的元数据。此元数据将数据映射到特定的分片。查询路由器使用此数据来确定将读写操作发送到何处。自 MongoDB 3.4 起,配置服务器以配置服务器副本集(CSRS)的形式部署,以确保一致性和高可用性。一个 CSRS 通常由三个成员组成。
- 查询路由器(
mongos):这些是轻量级的服务器进程,充当客户端应用程序与分片集群之间的接口。客户端连接到mongos实例,mongos将查询路由到适当的分片,并整合结果后再将其返回给客户端。一个集群可以有多个查询路由器来分发客户端请求负载。
实践中的分片:MongoDB Atlas
Section titled “实践中的分片:MongoDB Atlas”手动配置、部署和管理分片集群是一项复杂的管理任务。因此,大多数团队选择使用托管服务。MongoDB Atlas 提供了一个完全自动化的分片解决方案。您只需点击几下即可为您的集群启用分片,Atlas 会处理底层的供应、配置和分片平衡。这极大地简化了扩展,使开发团队能够利用分片的强大功能,而无需承担运营开销。
分片集群的性能在很大程度上取决于“分片键”的选择。分片键是文档中的一个字段或字段组合,MongoDB 用它来将数据分布到各个分片上。一个好的分片键能够均匀地分布数据并高效地路由查询。选择正确的分片键是实施分片时最关键的决策之一。