mongo片键选择

本文介绍了MongoDB中的分片概念,包括基本概念、数据分发方式、不同类型的片键及其应用场景。探讨了升序片键、随机片键及hash片键的特点,并解释了如何配置hash片键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

片键:mongo使用一个或者几个字段的组合来分发数据到分片的标准,一旦形成了多个分片,再修改片键是不可能的事情

随着分片的增加(成千上百个)不能做遍历所有分片才能返回的结果的操作(慢!)

分片的目的是通过增加并行性来提高mongo的吞吐量(每秒处理的IO),而不是为了降低延迟;当然也增加了数据的总存储量

数据分发

分片中的数据是以数据块chunk来管理的,块是随机分发到每个分片中;当某一片的chunk太多时,mongo平衡器会自动迁移数据块到其他的分片上,来保持每个分片数据块的基本平衡。mongo路由只需要管理请求到数据块的映射即可。

升序片键
以id大小有序的范围形成一个一个的数据块,且新的写请求都是路由到同一个分片的同一个数据块中(maxCurrentId-$maxKey数据块);mongo必须不断的才分这个不断膨胀的数据块,且迁移到其他分片中。

随机片键
以一种具有随机性的字段作为片键,电话、email、hash散列值等。这样写IO会比较均匀的路由到每个数据块;

片键策略

hash片键

Hashed shard keys use a hashed index of a field as the shard key to partition data across your sharded cluster
当集群使用片键分发数据时,hash片键使用的是字段的hash索引,所以先创建hash索引:
db.yourCollection.createIndex( { a: "hashed" } )
开启集合的hash分片
sh.shardCollection( "db.yourCollection", { a: "hashed" } )

对一个字段建立了hash索引后,还可以再建立普通的升序、降序的索引;使用范围比较的时候,mongo就会使用普通的索引

you can create both a hashed index and an ascending/descending (i.e. non-hashed) index on the same field: MongoDB will use the scalar index for range queries.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值