文档菜单
文档首页
/ / /
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 支持两种声明分片键的语法。标准语法遵循 MongoDBshardCollection 命令行辅助工具 的格式,允许指定范围和哈希分片键、复合分片键和集合分片选项

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 将将分片键以及 id 字段值一起提供给 find 命令,以改进查询性能,尤其是在 地理分布式的分片集群 上。如果集合没有使用指定的分片键进行分片,查询可能会产生不正确的结果。

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

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

注意

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

注意

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

返回

索引管理