Shard Keys

Shard Key决定集合中文档在shard集群中的分布。Shard key是存在于集合每一个文档中单个或组合的索引字段。

MongoDB使用shard key值的区间,对集合中的数据进行分区。每一个区间都对应相互不重叠的shar key值的范围,并与一个数据块(chunk)进行关联。

MongoDB试图在分片集群之间,均匀的分布chunk。Shard key直接决定了数据块的分布效果。参见:123

!important: 一旦你分片一个集合,shard key和shard key的值就不可以再改变

  • 你不可以设置其它的shard key
  • 也不可以更新shard key字段的值

Shard Key指定(Shard key Specification)

为了分片一个集合,你可以使用sh.shardCollection()方法,并指定目标的集合和Shard Key:

sh.shardCollection( namespace, key )

  • namespance参数由目标集合的全名字符串组合,格式为<database>.<collection>
  • key参数由文档中的一个索引字段组成

有关使用hash分片策略,请查阅Shard a Collection using Hashed Sharding

有关使用randed分片策略,请查询Shard a Collection using Randed Sharding

Shard Key索引

所有的分片集合都必须拥有至少一个索引来支持shard key;可以使用一个单独的索引字段来作为Shard key,也可以使用一个组合索引的前面的部分来作为索引。

  • 如果集合为空,当sh.shardCollection()方法指定的shard key索引不存在时,将自动创建它。
  • 如果集合不为空时,在使用sh.shardCollection()方法前,你必须为shard key创建索引

如果删除了最后有效的索引,重建索引将恢复分片。

唯一索引

一个分片集合,仅_id字段和用于shard key的索引或者锁前面部分用于shard key的组合索引可以设置为唯一:

  • 无法在拥有其它唯一索引的集合上创建分片
  • 也无法在分片集合上创建其它的唯一索引

通过使用分片键上的唯一索引,MongoDB可以在分片键值上强制执行唯一性。MongoDB在整个组合键上强制执行唯一性,而不是在shard key的单个个体上。可以在sh.shardCollection()方法中给unique参数指定true值,来为shard key的值指定强制唯一性:

  • 如果集合为空,并且唯一索引不存在时,sh.shardCollection()方法将为shard key创建唯一集合
  • 如果集合不为空,你必须在执行sh.shardCollection()方法之前,创建索引

Choosing a Shard Key

Shard key选择,将决定分片集群均衡器的创建(sharded cluster balancer)和数据快在分片中的分布。将会影响整体的效率和操作的性能。

Shard Key使用的分片策略,也会影响效率和性能。

理想状态下,shard key允许MongoDB在集群之间均匀的分布数据。

At minimum, consider the consequences of the cardinality, frequency, and rate of change of a potential shard key. 创建shard key时,至少需从分片的基数、频率和变化的后果来进行考虑。

限制Restrictions

results matching ""

    No results matching ""