mongodb笔记09--手动预先分片

chunk:

        mongodb的分片不是从单篇文档的级别平均的散落在每个片上, 而是N条文档,形成一个块"chunk",优先放在某个片中,chunk的概念有些类似于数据库中的分区的概念。当chunk的大小达到了chunk size的指定大小后(默认是64M,可在config数据库中修改),或chunk中的文档数量超过了一定值之后也会分裂这个chunk。

         自然而然,如果我们有很多数据,优先向一个片中插入,当chunk数据量过大再移动chunk,随着数据的增多,shard的实例之间的chunk来回移动现象自然将带来服务器之间的IO的增加

手动预先分片:

        定义一个规则, 某N条数据形成1个块,预告分配M个chunk,M个chunk预告分配在不同片上.以后的数据直接入各自预分配好的chunk,不再来回移动

        例1:

        预先在shop数据库的user表上根据user_id字段数量分割,每隔1K条数据分一个chunk一共分10次,这样的界限切好chunk(虽然chunk是空的), 这些chunk将会均匀移动到各片上.

        例2:

        以age为片键先创建片

                db.runCommand({ enablesharding:"lin" })

                db.runCommand({ shardcollection : "lin.c1", key : { age:1 }})  

此时只有一个chunk在shard1上

                sh.splitAt("lin.c1", { age:10});

                sh.splitAt("lin.c1", { age:20});

此时有三个chunk在shard1上

        手动moveChunk:

            db.adminCommand( { moveChunk : "lin.c1",find : { age:0},to : "shard0" } )

            db.adminCommand( { moveChunk : "lin.c1",find : { age:10},to : "shard1" } )

            db.adminCommand( { moveChunk : "lin.c1",find : { age:20},to : "shard2" } )

        此时[负无穷,10),的数据位于shard0上,[10,20)的数据位于shard1上,[20,正无穷)的数据位于shard2上。

当插入测试数据,就会按照你指定的规则进行数据分配了...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容