如果没有对集合设置数据分片,数据将被集中存放在一个Shard节点中,这将导致其他Shard节点的存储空间和计算性能无法被充分利用。

前提条件

实例类型为分片集群实例。

  • 片键一经设置,不可修改,不可删除。
  • 执行了数据分片操作后,均衡器会对满足条件的数据进行拆分,这将占用实例的资源,请在业务低峰期操作。

说明 您可以在设置数据分片之前,调整均衡器的活动窗口,指定它在业务低峰期执行均衡操作。详情请参见设置Balancer的活动窗口

  • 片键的选取将影响分片集群实例性能,关于片键选取的案例介绍,请参见。

分片策略介绍

除了上述两种分片策略,您还可以配置复合片键,例如由一个低基数的键和一个单调递增的键组成,详情请参见Shard Key选择案例

本文以mongodbtest数据库,customer集合为例介绍操作流程。

  • 对集合所在的数据库启用分片功能。

示例:

说明 您可以通过sh.status()查看分片状态。

  • 对片键的字段建立索引。

说明

  • <collection>:集合名。
  • <keypatterns>:包含用于建立索引的字段和索引类型。 常见的索引类型如下:

    • 1:创建升序索引
    • -1:创建降序索引
    • "hashed":创建哈希索引

创建哈希索引示例:

  • 对集合设置数据分片。
  1. sh.shardCollection("<database>.<collection>",{ "<key>":<value> } )

说明

  • <database>:数据库名。
  • <collection>:集合名。
  • :分片的键,MongoDB将根据片键的值进行数据分片。
  • <value>
    • 1:表示基于范围分片,通常能很好地支持基于片键的范围查询。

基于范围分片的配置示例:

基于哈希分片的配置示例:

  1. sh.shardCollection("mongodbtest.customer",{"id":"hashed"})

后续操作

经过一段时间的运行或数据写入后,您可以在Mongo Shell中执行sh.status(),查看数据在各Shard节点中的分布信息。设置数据分片以充分利用Shard性能 - 图1