mongodb 中怎么利用分片集群创建分片集合

64次阅读
没有评论

共计 1576 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

mongodb 中怎么利用分片集群创建分片集合,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1. 创建数据库,直接 use 即可,没有的话,如果你创建集合了,他就自动创建了!

use liuwenhe

2. 插入数据,如果 hezi 集合不存在,则自动创建

for (var i = 0; i 100; i++) {db.hezi.insert({name: i}); }

3. 为 hezi 集合的 name 列添加索引, 因为如果要以 name 列作为分片键,需要有索引;

如果集合是空的,可以不创建索引直接进行下一步的分片,会自动创建索引; 如果集合不为空,必须为分片建创建索引才行!,如果你要以 hash 规则分片,需要创建 hash 索引!

mongos db.hezi.createIndex({name :1})

mongos db.hezi.createIndex({name: hashed 创建 hash 索引

4. 为数据库开启分片, 这样才能对数据库 liuwenhe 下的集合做分片!

mongos sh.enableSharding(liuwenhe

5. 开启集合 hezi 的分片!

1:升序,- 1 降序,hashed:哈希分布

sh.shardCollection(liuwenhe.hezi ,{name:1})  —- 基于值的分片

sh.shardCollection(liuwenhe.hezi , { name : hashed})    —-hash 规则分片

6. 查看集合是否开启分片:

mongos use liuwenhe

mongos db.hezi.stats().sharded

true

7.sh.status() 查看分片的信息:

可以看到 liuhe 库的主分片是 s1092111427021,然后 liuhe.hezi 这个集合的分片键是 name 列升序,liuhe.hezi 这个集合目前就 1 个 chunk,在 s1092111427021 节点上,所以这个时候你去别的节点,例如 s1092111427020 上看,是没有这个库和这个集合的,当你向 liuhe.hezi 插入数据,直到触发发生 chunk 迁移之后,这时候在别的分片才会有可能有这个集合!

mongos sh.status()

{_id : liuwehehe , primary : s1092111427021 , partitioned : true, version : { uuid : UUID( 46373baa-3f93-42c3-a7fd-51225ef00636), lastMod : 1 } }

liuwenhe.hezi

shard key: {name : 1}

unique: true

balancing: true

chunks:

s1092111427021 1

{name : { $minKey : 1} } — {name : { $maxKey : 1} } on : s1092111427021 Timestamp(1, 0)

8. 当数据超过 1 个 chunk 之后,均匀分布在多个节点上,如下所示:

不断插入数据,直到触发 chunk 迁移:

for (var i = 0; i 1000000000000000; i++) {db.hezi.insert({name: i}); }

不断查看分片集群状态, 如下所示三个节点上基本均匀的分布了 20、19、20 个 chunk:

mongos sh.status()

liuwenhe.hezi

shard key: {name : 1}

unique: false

balancing: true

chunks:

s1092111427019 20

s1092111427020 19

s1092111427021 20

看完上述内容,你们掌握 mongodb 中怎么利用分片集群创建分片集合的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1576字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)