加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB分片键怎么选择?

发布时间:2023-09-22 13:20:26 所属栏目:系统 来源:
导读: 本文主要给大家的介绍的关于MongoDB分片键的选择,对于不清楚MongoDB分片键类别有哪些和不知道如何挑选MongoDB分片键的朋友可以参考,下面我们一起来了解一下MongoDB分片键。

分片键选择不好,应用程
      本文主要给大家的介绍的关于MongoDB分片键的选择,对于不清楚MongoDB分片键类别有哪些和不知道如何挑选MongoDB分片键的朋友可以参考,下面我们一起来了解一下MongoDB分片键。

       分片键选择不好,应用程序就无法利用分片集群所提供的诸多优势。在这种情况下,插入和查询的性能都会显著下降。下决定时一定要严肃,一旦选择了分片键,就必须坚持选择,分片键是不可以修改的。要让分片键提供好的体验,部分源自了解怎样才算一个好的分片键。

       MongoDB版本:3.6

       一、分片键类别

       1.升序片键

       升序片键例如:日期时间字段、自增字段。

       2.随机分发片键

       随机分发片键例如:用户名、邮件名、UUID、MD5值或者是其它的一些没有规律的值的列。

       3.基于位置的片键

       基于位置的片键例如:IP、经纬度、居住地址等。

       二、分片策略

       1.范围分片

       创建分片时,只在主分片上创建了一个块{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } } on : rs-a Timestamp(1, 0) 。

       至少得3个不同的值才会进行块切分,相同的值只会在一个分片块中。比如对一个name字段进行范围分区,如果一直往name字段插入"a",那么它会一直存储主分片的{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } }中,直到name出现三个不同的值,比如“a”,“b”,“c”这个时候就会进行分片。当然这只是测试,现实中不会对这种粗粒度的字段单独做分片。

       2.hashed分片

       创建分片时,默认在每个分片上创建了两个数据块。但是当前每个块上面是没有数据的。

       3.组合分片

       组合分片是比较好的一种分片的选择,好的组合分片可以同时解决热点和随机读IO问题。例如:

sh.shardCollection("test.bbbb",{"username":1,"_id":1});

       4.标签分片

       比如对于一些日志非查询文档,可以通过标签将其只插入到某个分片中。例如

sh.addTagRange("test.log",{ "_id" : { "$minKey" : 1 } }, { "_id" : { "$maxKey" : 1 } },"tag_rs-a");
       可以在config库中的tag文档中查看设置的标签信息。

use config

db.tags.find();

       三、标签

       可以通过标签将特定范围的数据在指定的分片中。

       将{ "_id" : 18000 } -->> { "_id" : 26000 }范围的数据保存到rs-a的分片上,这部分数据跨越了两个数据块。

       1.为分片指定tag

sh.addShardTag("rs-a","tag_rs-a");

sh.addShardTag("rs-b","tag_rs-b");

sh.addShardTag("rs-c","tag_rs-c");
       2.创建规则

sh.addTagRange("test.person",{ "_id" : 18000 }, { "_id" : 26000 },"tag_rs-a");


       数据{ "_id" : 18000 } -->> { "_id" : 26000 }已经被移动到了rs-a分片上。

       四、设计集合注意事项

       1.集合的键数量应该是固定的,包括嵌套文档的数量都应该提前规划好。

       2.尽量都是做原子更新,而不是某个键的值受其它键值更新的影响。比如num1,num2,total如果num键的值是经常会被更新的那么这种设计就不好,因为total也要对应跟着变,而mongodb本身计算能力就很弱。

       关于以上MongoDB分片键类别和挑选的介绍,大家在选择MongoDB分片键时可以参考上述几点,希望本文对大家有帮助,更多MongoDB分片键相关内容可以关注其他文章。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章