mongodb

【mongoDB】MongoDB chunks

2023-09-30  本文已影响0人  Bogon

MongoDB chunks

复制集(replicaSet) chunks

image.png

GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。

GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。

GridFS 可以更好的存储大于16M的文件。

GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。

GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。

每个文件的实际内容被存在chunks(二进制数据)中和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。

fs.chunks集合中多个文档中的file_id字段对应fs.files集中文档”_id”字段

fs.chunks 集合存储文件文件内容的二进制数据,以类json格式文档形式存储。

每在GridFS存储一个文件,GridFS就会将文件内容按照chunksize大小(chunk容量为256k)分成多个文件块,然后将文件块按照类json格式存在.chunks集合中,每个文件块对应fs.chunk集合中一个文档。

一个存储文件会对应一到多个chunk文档。

image.png image.png image.png

分片集群(shard cluster) chunks

image.png

在一个shard server内部,MongoDB还是会把数据分为chunks,每个chunk代表这个shard server内部一部分数据。

chunk的产生,会有以下两个用途:

Splitting
当一个chunk的大小超过配置中的chunk size时,MongoDB的后台进程会把这个chunk切分成更小的chunk,从而避免chunk过大的情况。

Balancing
在MongoDB中,balancer是一个后台进程,负责chunk的迁移,从而均衡各个shard server的负载,系统初始1个chunk,chunk size默认值64M,生产库上选择适合业务的chunk size是最好的。

mongoDB会自动拆分和迁移chunks。

小的chunksize:数据均衡是迁移速度快,数据分布更均匀,数据分裂频繁,路由节点消耗更多资源。
大的chunksize:数据分裂少。
数据块移动集中消耗IO资源。

随着数据的增长,其中的数据大小超过了配置的chunk size,默认是64M,则这个chunk就会分裂成两个。
数据的增长会让chunk分裂得越来越多,这时候,各个shard 上的chunk数量就会不平衡。
这时候,mongos中的一个组件balancer 就会执行自动平衡,把chunk从chunk数量最多的shard节点挪动到数量最少的节点。

image.png image.png image.png

MongoDB 默认的 chunkSize 为64MB,如无特殊需求,建议保持默认值;chunkSize 会直接影响到 chunk 分裂、迁移的行为。

chunkSize 越小,chunk 分裂及迁移越多,数据分布越均衡;反之,chunkSize 越大,chunk 分裂及迁移会更少,但可能导致数据分布不均。

chunkSize 太小,容易出现 jumbo chunk(即shardKey 的某个取值出现频率很高,这些文档只能放到一个 chunk 里,无法再分裂)而无法迁移;chunkSize 越大,则可能出现 chunk 内文档数太多(chunk 内文档数不能超过 250000 )而无法迁移。

chunk 自动分裂只会在数据写入时触发,所以如果将 chunkSize 改小,系统需要一定的时间来将 chunk 分裂到指定的大小。

chunk 只会分裂,不会合并,所以即使将 chunkSize 改大,现有的 chunk 数量不会减少,但 chunk 大小会随着写入不断增长,直到达到目标大小。

参考

MongoDB复制集
https://blog.csdn.net/qq_36433289/article/details/131585569

MongoDB fs.chunks、fs.files
https://www.cnblogs.com/first131/p/15990485.html

MongoDB GridFS
https://www.runoob.com/mongodb/mongodb-gridfs.html

MongoDB分片集群
https://zhuanlan.zhihu.com/p/163256154

一文读懂MongoDB chunk 迁移
https://cloud.tencent.com/developer/article/1794766

MongoDB中merge空的chunks
https://www.cnblogs.com/abclife/p/15968077.html

Modify Range Size in a Sharded Cluster
https://www.mongodb.com/docs/manual/tutorial/modify-chunk-size-in-sharded-cluster

上一篇下一篇

猜你喜欢

热点阅读