MongoDB分片键怎么挑拣?有哪些类型你知吗?
发布时间:2022-04-22 10:51:06 所属栏目:系统 来源:互联网
导读:本文主要给大家的介绍的关于MongoDB分片键的选择,对于不清楚MongoDB分片键类别有哪些和不知道如何挑选MongoDB分片键的朋友可以参考,下面我们一起来了解一下MongoDB分片键。 分片键选择不好,应用程序就无法利用分片集群所提供的诸多优势。在这种情况下,插
本文主要给大家的介绍的关于MongoDB分片键的选择,对于不清楚MongoDB分片键类别有哪些和不知道如何挑选MongoDB分片键的朋友可以参考,下面我们一起来了解一下MongoDB分片键。 分片键选择不好,应用程序就无法利用分片集群所提供的诸多优势。在这种情况下,插入和查询的性能都会显著下降。下决定时一定要严肃,一旦选择了分片键,就必须坚持选择,分片键是不可以修改的。要让分片键提供好的体验,部分源自了解怎样才算一个好的分片键。 一、分片键类别 1.升序片键 升序片键例如:日期时间字段、自增字段。 2.随机分发片键 随机分发片键例如:用户名、邮件名、UUID、MD5值或者是其它的一些没有规律的值的列。 3.基于位置的片键 基于位置的片键例如:IP、经纬度、居住地址等。 二、分片策略 1.范围分片 创建分片时,只在主分片上创建了一个块{ "username" : { "$minKey" : 1 } } -->> { "username" : { "$maxKey" : 1 } } on : rs-a Timestamp(1, 0) 。 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分片上。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |