服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - MongoDB的chunk详解

MongoDB的chunk详解

2021-07-25 21:55DBA随笔 MongoDB

这篇文章主要介绍了MongoDB的chunk的相关资料,帮助大家更好的理解和学习使用MongoDB数据库,感兴趣的朋友可以了解下

    mongodb中,在使用到分片的时候,常常会用到chunk的概念,chunk是指一个集合数据中的子集,也可以简单理解成一个数据块,每个chunk都是基于片键的范围取值,区间是左闭右开。例如,我们的片键是姓名的第二个字母,包含了a-z这26中可能,理想情况下,划分为26个chunk,其中每个字母开头的姓名记录即为一个chunk。

    在数据写入的时候,mongos根据片键shard key的值来写入对应的chunk中,chunk可以表示的最小范围是单个唯一的shard key的值,只包含具体的单个片键值文档的chunk不能被分割,这个也比较容易理解,如果某个chunk只包含一个片键的值,如果对它进行分割,则代表一个片键值映射了2个chunk,下次遇到这个片键的文档时,mongos就不知道应该存放在哪个chunk当中了。

chunk的大小如何确定???

    在mongodb中,chunk的默认大小是64mb,可以增加或者减少chunk的大小。

    chunk的大小不宜过小,如果chunk过小,好处是可以让数据更加均匀的分布,但是会导致chunk之间频繁的迁移,有一定的性能开销;同样的,chunk的大小不宜过大,过大的chunk size会导致数据分布不均匀,

chunk的分裂

    当某个chunk的值达到了chunk所能表示的最大值的时候,这个时候chunk不能无限增长,需要通过分割的方法来减少chunk的大小,例如一个64mb的chunk分割成2个32mb的chunk,这样虽然增加了chunk的数量,但是带来的收益是单个chunk的缩小。

MongoDB的chunk详解

chunk的迁移

    在分片+复制集的架构中,当某个服务器上的数据记录不停的增多,它上面分割的chunk就会变多,当集群中每个服务器上的chunk数量严重失衡的时候,mongodb会自动进行chunk的迁移工作,这个自动迁移的工作,是通过balancer来进行的。如果balancer发现各个shard之间的chunk数差异超过了提前规定的阈值,则会进行chunk的迁移工作,如下:

MongoDB的chunk详解

也就是从上面的状态变成下面的状态。每个小块代表一个chunk。

mongodb自动触发迁移的阈值表如下:

chunk数量:   <20,迁移阈值:2

chunk数量:20~79,迁移阈值:4

chunk数量:   >80,迁移阈值:8

chunk的迁移一般使用锁来实现,从mongodb3.4版本起,chunk的迁移分为7个步骤:

1、balancer进程将movechunk的命令发送到源shard中

2、源shard使用内部movechunk命令开始移动,迁移过程中,该chunk的操作依旧在源shard上进行,源shard依旧负责该chunk的写入操作

3、目标shard开始创建所需索引

4、目标shard开始请求chunk中的文档并开始接收数据的复制

5、接收完源shard的最后一个文档之后,目标shard启动一个同步进程,这个进程会拉取迁移期间的日志,将迁移期间对该chunk的操作更新到目标chunk中。

6、当完全同步时,源shard连接到config数据库并更新chunk的位置元数据。

7、完成数据更新后,一旦在源shard上没有对该chunk的操作,源shard会异步删除chunk。当然,用户可以设置_waitfordelete参数为true,让源shard在chunk迁移完成后同步删除chunk数据

通常情况下,chunk迁移由下面三种场景触发:

1、多个shard上分布不均匀

2、用户调用removeshard之后,被移除的shard上的chunk就要被迁移到其他的shard上

3、mongodb的shard tag功能,可以对shard或者shard  key range打标签,系统会自动将对应的range的数据迁移到拥有相同tag的shard上。

以上就是mongodb的chunk详解的详细内容,更多关于mongodb chunk的资料请关注服务器之家其它相关文章!

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB 学习笔记

    MongoDB 学习笔记

    最近在学习MongoDB,小结一下,主要都是一些基础知识,需要的朋友可以参考下 ...

    服务器之家3412020-04-25
  • MongoDBMongodb数据库误删后的恢复方法(两种)

    Mongodb数据库误删后的恢复方法(两种)

    本文给大家分享两种方法来实现Mongodb数据库误删后的恢复,每种方法给大家介绍的都非常详细,需要的朋友参考下吧 ...

    fyg05249922020-05-18
  • MongoDBMongodb如何开启用户访问控制详解

    Mongodb如何开启用户访问控制详解

    默认启动 MongoDB 服务时没有任何参数,可以对数据库任意操 作,而且可以远程访问数据库,所以推荐开发阶段可以不设置任何参数,但对于生产环境还是要...

    不争5402020-05-10
  • MongoDBMongoDB分片测试

    MongoDB分片测试

    分片是mongoDB扩展的一种方式。分片分割一个collection并将不同的部分存储在不同的机器上,本文给大家介绍MongoDB分片测试,需要的朋友参考下吧 ...

    我思,故我在5532020-05-05
  • MongoDBMongoDB 简单入门教程(安装、基本概念、创建用户)

    MongoDB 简单入门教程(安装、基本概念、创建用户)

    这篇文章主要介绍了MongoDB 简单入门教程(安装、基本概念、创建用户)的相关资料,帮助大家更好的理解和学习使用MongoDB数据库,感兴趣的朋友可以了解下...

    AsiaYe6352021-05-10
  • MongoDBMongoDB简单操作示例【连接、增删改查等】

    MongoDB简单操作示例【连接、增删改查等】

    这篇文章主要介绍了MongoDB简单操作,涉及命令行窗口下使用MongoDB进行简单的连接、增删改查等相关操作技巧,需要的朋友可以参考下 ...

    tinyphp2982020-05-23
  • MongoDB将MongoDB加入到Windows的本地服务项的方法

    将MongoDB加入到Windows的本地服务项的方法

    下面主要针对MongoDB在Windows下加入本地服务项做一些简单的分享。以方便刚接触MongoDB并在Windows环境下进行开发的同学 ...

    MongoDB教程网3012020-04-28
  • MongoDBMongo服务重启异常问题的处理方法

    Mongo服务重启异常问题的处理方法

    这篇文章主要给大家介绍了关于Mongo服务重启异常问题的处理方法,这个问题其实还是挺常见的,通过此文学习处理方法,以后遇到了就不会措手不及的,需要的...

    Leafage11842021-08-24