MongoDB学习笔记——Sharding

1、Sharding Key

Sharding key决定了shard在对document进行分发时的策略,它是由在目标collection中每个document中都存在的字段组成,当对非空collection进行分片时,collection必须有以sharding key开头的索引。

  1. Ranged Shard Key:根据 shard key 的取值,它把数据切分成连续的几个区间。取值相近的纪录会放进同一个 shard 服务器。好处是查询连续取值纪录时,查询效率可以得到保证。当数据库查询语句发送到 mongos 中时,mongos 会很快的找到目标 shard,而且不需要将语句发送到所有的 shard 上,一般只需要少量的 shard 就可以完成查询操作。缺点是不能保证数据的平均分配,在数据插入和修改时会产生比较严重的性能瓶颈。
  2. Hashed Shard Key:与Ranged Shard Key 对应的一种被称之为 Hashed Shard Key,它采用字段的索引哈希值作为 shard key 的取值,这样做可以保证数据的均匀分布。在 mongos 和各个 shard 集群之间存在一个哈希值计算方法,所有的数据在迁移时都是根据这个方法来计算数据应当被迁移到什么地方。当 mongos 接收到一条语句时,通常他会把这条语句广播到所有的 shard 上去执行。

选择字段作为sharding key时,应该考虑该字段一下几个参数:

  1. Cardinality(基数):该字段的基数范围,可以理解为该字段可能出现的值的个数。选择尽量大基数的字段,这样才可能尽量多的分发到多个chuank(如果基数为5,只可能分发到5个chuank,也就最多分发到5个shard中),更好地在shard间进行chuank迁移。如果非要使用低基数字段作为key,可以考虑加入大基数字段作为复合索引。
  2. Frequency(频率):该字段有多少相同值得记录。由于相同值得key只能被分发到同一个chuank中,所以如果一个有一些值得频率过高的话就会形成junbo chuank(巨型块),不可切分,严重影响水平扩展。如果非要用频率高的字段,可以考虑加入低频值的字段作为复合索引。
  3. Monotonically(单调性):该字段是否单调增长或减小。在使用ranged key时,尽量不要取单调性的字段,不然后加入的数据只会往最后或者最前的shard中插入,不断增大边缘shard的大小。因此尽量使用hashed sharding。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,260评论 2 89
  • Mongodb分片概括 分片在多台服务器上分布数据的方法, Mongodb使用分片来支持具有非常大的数据集和高吞吐...
    平凡的运维之路阅读 14,314评论 0 7
  • 原文 切片 通过将数据分散保存在不同机器之间称之为切片,MongDB使用切片来支持超大数据和超高负载的环境。 超大...
    ChanZeeBm阅读 1,547评论 0 1
  • 我知道 也明白 情本就是这样 一如旅途的风景和故事 为何来 又为何去 我知道 满心的甜密 都源于象牙塔里的长伴 只...
    星空掠影阅读 284评论 0 0
  • 文/爱六 不悔梦归处,只恨太匆匆。 ——...
    张天真阅读 690评论 4 12

友情链接更多精彩内容