MongoDB chunks
复制集(replicaSet) chunks
image.pngGridFS 用于存储和恢复那些超过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节点挪动到数量最少的节点。
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
网友评论