Docs 菜单
Docs 主页
/ / /
Mongoid
/

分片配置

在此页面上

  • 声明分片键
  • 分片管理 Rake 任务

Mongoid 可以协助在分片环境中设置集合分片。

可以使用 shard_key宏在模型上声明分片键:

class Person
include Mongoid::Document
field :ssn
shard_key ssn: 1
# The collection must also have an index that starts with the shard key.
index ssn: 1
end

请注意,要对分片进行分集合集合具有以分分片键开头的索引。 Mongoid 提供索引管理功能,此处的示例充分利用了该功能。

Mongoid 支持两种声明分片键的语法。 标准语法遵循 MongoDB shardCollection shell 助手的格式,并允许指定范围和哈希分片键、复合分片键和集合分片选项:

shard_key ssn: 1
shard_key ssn: 1, country: 1
shard_key ssn: :hashed
shard_key {ssn: :hashed}, unique: true

另一种方法是使用速记语法,其中仅给出键。 此语法仅支持范围分片键,不允许指定选项:

shard_key :ssn
shard_key :ssn, :country

shard_key 宏可以使用belongs_to关联的名称来代替字段名称,在这种情况下,Mongoid 将使用关联中配置的外键作为字段名称:

class Person
include Mongoid::Document
belongs_to :country
# Shards by country_id.
shard_key country: 1
# The collection must also have an index that starts with the shard key.
index country: 1
end

分片分片键还可以通过使用“.”来引用嵌入式文档中的字段。 字符来分隔字段名称:

shard_key "location.x" => 1, "location.y" => 1
shard_key "location.x", "location.y"

注意

因为“.” 字符用于分隔嵌入式文档中的字段,Mongoid 目前不支持本身字面包含“.”的分片键字段。 字符。

注意

如果模型声明了分片键,则 Mongoid 希望使用指定的分片键对相应的集合进行分片。 重新加载模型时,Mongoid 将向find命令提供id字段值和分片键,以提高查询性能,尤其是在地理上分布的分片集群上。 如果未使用指定的分片键对集合进行分片,查询可能会产生不正确的结果。

要根据模型中定义的分片键对数据库中的分片进行分片,请运行db:mongoid:shard_collections 分片任务。 如有必要,请在对集合进行分片之前运行db:mongoid:create_indexes Rake任务:

rake db:mongoid:create_indexes
rake db:mongoid:shard_collections

注意

与索引管理rake 任务一样,分片管理rake 任务在遇到特定模型类的问题时通常不会停止并失败。 相反,他们在适当的级别日志问题(记录到配置的 Mongoid 记录器),并继续下一个模型。 在 Rails应用程序中使用 Mongoid 时,这意味着 rake任务执行的结果通常可以在每个环境的日志文件中找到,例如log/development.log

注意

在分片分片集群中执行模式相关的操作时(例如本文档中描述的对集合进行分片,或者创建或删除集合或数据库),集群节点最终可能会获得过期的本地配置相关缓存数据。 在每个mongos节点上执行flushRouterConfig命令以清除这些缓存。

后退

索引管理