MongoDB的块详细说明
  • 作者:admin
  • 发表时间:2021-04-22 07:51
  • 来源:未知

在MongoDB中,当使用切片时,经常使用组块的概念。组块是指集合数据的子集,也可以简单地理解为数据块。每个块都基于切片键的范围,间隔是左闭右开的。比如我们的切片键就是名字的第二个字母,包含A-Z的26种可能,理想情况下分为26个组块,其中每个字母开头的名字记录就是一个组块。

当数据被写入时,mongos根据分片键的值将其写入相应的块。区块可以代表的最小范围是单个分片键的值。只包含特定单个shardkey文档的组块是不能分区的,这很容易理解。如果一个块只包含一个切片键值,如果它被分区,这意味着一个切片键值被映射到两个块。下一次你遇到一个有这个切片键的文档,Mon

如何确定组块的大小?

在MongoDB中,块的默认大小是64MB,可以增加或减少。

块的大小不能太小。如果组块太小,好处是数据可以分布的更均匀,但是会导致唐山网站制作中组块之间频繁迁移,有一定的性能开销;同样,块的大小也不能太大,太大的块会导致数据分布不均匀。

组块划分

当一个块的值达到一个块可以表示的最大值时,此时块不能无限增长,块的大小需要通过拆分来减小。例如,一个64MB的块被分成两个32MB的块,这增加了块的数量,但是好处是减少了单个块。

组块迁移

在分区复制集的体系结构中,当服务器上的数据记录数量不断增加时,会有更多的块被划分在其上。当集群中每台服务器上的区块数量严重失衡时,mongodb会自动迁移区块。这种自动迁移是通过平衡器执行的。如果平衡器发现碎片之间的块号差异超过预先指定的阈值,它将迁移块,如下所示:

也就是从上位状态到下位状态。每个小块代表一个块。

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

区块数:20,迁移阈值:2

组块数:20~79,迁移阈值:4

区块数:80,迁移阈值:8

组块的迁移一般通过使用锁来实现。从MongoDB3.4开始,块的迁移分为七个步骤:

1.平衡器进程向源碎片发送moveChunk命令

2.源碎片使用内部movechunk命令开始移动。在迁移过程中,区块的操作仍在源碎片上执行,源碎片仍负责区块的写入操作

3.目标碎片开始创建所需的索引

4.目标分片开始分块请求文档,并开始复制接收到的数据

5.在接收到源分片的最后一个文档后,目标分片开始同步过程,该过程将在迁移期间拉日志,并在迁移到目标分片期间更新分片的操作。

6.完全同步后,源分片连接到配置数据库,并更新块的位置元数据。