关于mongodb相信都不用多说,我们知道,分片是其一大核心,今天我们就来了解一下mongodb的分片原理。
什么是分片?
分片(sharding)用官方的话说,就是指把数据库拆分,将其分散在不同的机器上的一个过程。通俗的来说,就是把各种数据分成块,然后存储到不同的服务器上。
分片的作用?
如果我们把数据都分散到不同的机器上,就算不需要功能强大的服务器我们也可以储存更多数据和处理更大的负载。它的基本思想就是将集合切成一个个小块,然后把这些块分散到若干片里,每个片只负责总数据的一部分,最后会通过一个均衡器来对各个分片进行均衡(数据迁移)。再通过一个名为mongos的路由进程进行操作,mongos通过配置服务器是知道数据和片的对应关系的。
什么场景下使用分片?
-数据存储容量需求超出单机磁盘容量
-活跃数据集超出单机内存容量,导致请求需从磁盘读取数据,影响性能
-写IOPS超出单个MongoDB节点的写服务能力
分片是根据什么来分的?
1)、以数据库来分:把数据库里的多个集合分别放置到不同的分片上,同一个集合的数据只能在同一分片上。
2)、以某个集合中的某个键来分:我们把这个键称为片键,根据设置的片键把一个集合的数据分到不同的片上,这个分片键可以是多个键的组合键。
分片中有哪些角色?
1)、配置服务器:用来存放分片信息,分片的数据与片的关系。
2)、mongos路由:指一个路由进程,把所有对mongodb的数据读写请求根据配置服务器的配置信息分配到不同的分片服务器上去。本身不会存储数据和配置信息,但会缓存配置信息。
3)、片:指一个分片,这个分片可以是一台服务器,也可以是多台服务器组成的一个集群。但对应的多台服务器里只能有一台主服务器。
以上就是mongodb分片原理的所有相关内容了,在java架构师学习路线中,这可以说是较重要的一点,希望对你有所帮助。
推荐阅读: