MongoDB哈希片键是什么
发布时间:2023-09-15 09:37:03 所属栏目:系统 来源:
导读:哈希片键使用哈希索引在共享集群中对数据进行分区。哈希索引计算单个字段的哈希值作为索引值,该值用作片键(注意,这里并不是字段本身的值,而是hash之后的值)。
哈希分片在分片集群中提供了更均匀的数据分布,集
哈希分片在分片集群中提供了更均匀的数据分布,集
哈希片键使用哈希索引在共享集群中对数据进行分区。哈希索引计算单个字段的哈希值作为索引值,该值用作片键(注意,这里并不是字段本身的值,而是hash之后的值)。 哈希分片在分片集群中提供了更均匀的数据分布,集合中那些具有近似值的文档,可能会被分到不同的块上,mongos更有可能执行广播操作来完成给定的范围查询。哈希值得计算,是由MongoDB来负责的,不是应用程序负责的。 作为哈希片键的索引字段应该有如下特点: 1、具有大量不同的值 2、哈希索引适合单调变化的字段,例如自增值,时间值等(因为可以将单调的字段通过hash函数映射到不同的块上去,从而分散写入压力,虽然数据连续,但是写入了不同的数据块中) 它的缺点也比较明显,当我们查询某个范围的值的时候,hash索引会查找更多的数据分片,并将最终的结果汇总起来交给我们。 在实际生产环境中,我们需要结合自己的需求来确定使用哪种类型的片键,再次强调,在设定某个字段作为片键之前,需要先在当前字段创建对应类型的索引,或者创建一个以当前字段开头的联合索引。否则设定片键的语句会报错。 下面是分片创建从无到有的过程举例: 1、创建表,只有一个字段name,并插入数据 mongos> use aaa switched to db aaa mongos> db.aaa.insert({name:1}) WriteResult({ "nInserted" : 1 }) mongos> db.aaa.insert({name:2}) WriteResult({ "nInserted" : 1 }) mongos> db.aaa.insert({name:3}) WriteResult({ "nInserted" : 1 }) mongos> db.aaa.insert({name:4}) WriteResult({ "nInserted" : 1 }) mongos> 2、查看数据 mongos> db.aaa.find() { "_id" : ObjectId("5fdb7d54d91f2f9bae3b09a1"), "name" : 1 } { "_id" : ObjectId("5fdb7d56d91f2f9bae3b09a2"), "name" : 2 } { "_id" : ObjectId("5fdb7d59d91f2f9bae3b09a3"), "name" : 3 } { "_id" : ObjectId("5fdb7d5cd91f2f9bae3b09a4"), "name" : 4 } 3、允许数据库分片 mongos> sh.enableSharding("aaa") { "ok" : 1, "operationTime" : Timestamp(1608220038, 3), "$clusterTime" : { "clusterTime" : Timestamp(1608220038, 3), "signature" : { "hash" : BinData(0,"shemm3xvSYrMiy9t7gSYcVtFUuE="), "keyId" : NumberLong("6894922308364795934") } } } mongos> 4、在name字段创建hash索引 mongos> db.aaa.createIndex({name:"hashed"},{background:true}) { "raw" : { "sharding_yeyz/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020" : { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } }, "ok" : 1, "operationTime" : Timestamp(1608220115, 3), "$clusterTime" : { "clusterTime" : Timestamp(1608220115, 3), "signature" : { "hash" : BinData(0,"S3Wz9G26eJyOcwa1OLS6TVYu6SE="), "keyId" : NumberLong("6894922308364795934") } } } 5、以name字段作为片键创建哈希分片 mongos> sh.shardCollection("aaa.aaa",{name:"hashed"}) { "collectionsharded" : "aaa.aaa", "collectionUUID" : UUID("20a3895e-d821-43ae-9d28-305e6ae03bbc"), "ok" : 1, "operationTime" : Timestamp(1608220238, 10), "$clusterTime" : { "clusterTime" : Timestamp(1608220238, 10), "signature" : { "hash" : BinData(0,"qeQlD3jsSvRZkyamEa2hjbezEdM="), "keyId" : NumberLong("6894922308364795934") } } } 以上就是关于MongoDB哈希片键的介绍,希望上述内容对大家学习有帮助。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐