Docs Menu
Docs Home
/ / /
Mongoid
/

シャーディング構成

項目一覧

  • シャードキーの宣言
  • シャーディング管理レイテンシ

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 は、シャードキーを宣言するための 2 つの構文をサポートしています。 標準構文は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 macOS では、フィールド名の代わりに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

注意

インデックス管理レイテンシと同様に、シャーディング管理レイテンシ タスクは通常、特定のモデル クラスで問題が発生しても停止せず失敗します。 代わりに、問題(構成された Mongoid ロガーに)を適切なレベルでログに記録し、次のモデルに進みます。 Mongoid が Rails アプリケーションで使用される場合、レイテンシ タスクの実行結果は通常、 log/development.logのように環境ごとのログファイルに表示されます。

注意

このドキュメントで説明されているコレクションのシャーディングや、コレクションやデータベースの作成や削除など、シャーディングされたクラスターでスキーマ関連の操作を実行すると、クラスター ノードによって古くなったローカル構成関連のキャッシュ データが生成されることがあります。 これらのキャッシュをクリアするには、各mongosノードでFlutterConfigコマンドを実行します。

戻る

インデックス マネジメント