シャーディング構成
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コマンドを実行します。