美文网首页mongodb
【mongoDB】MongoDB chunks

【mongoDB】MongoDB chunks

作者: Bogon | 来源:发表于2023-09-30 00:56 被阅读0次

    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

    相关文章

      网友评论

        本文标题:【mongoDB】MongoDB chunks

        本文链接:https://www.haomeiwen.com/subject/avhdbdtx.html