シャーディング構成
Overview
シャーディング は、複数のマシンにデータを分散する方法です。 MongoDB はシャーディングを使用して、大規模なデータセットと高スループット操作を伴う配置をサポートします。 このガイドでは、 Mongoidアプリケーションでシャーディングを構成する 方法を学習できます。
シャードキーを宣言する
MongoDB はシャードキー を使用して、コレクション内のドキュメントをシャード全体に分散します。 シャードキーは インデックスされたフィールド、または複合インデックスによってカバーされる複数のフィールドであり、クラスターの シャード 間でのコレクションの ドキュメント の配布を決定します。 Mongoidアプリケーションでは、モデルを作成するときに shard_key
マイクロを使用してシャードキーを宣言できます。
次の例では、 ssn
フィールドにシャードキーを持つ Person
クラスを作成します。
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 がモデルを再読み込みするときに、クエリのパフォーマンスを向上させるために、_id
フィールドとともにシャードキーをfind
コマンドに提供します。 コレクションが指定されたシャードキーでシャーディングされていない場合、クエリは期待どおりの結果を返さない可能性があります。
構文
シャードキーは、完全なMongoDB構文または 短縮構文を使用して宣言できます。
mongosh
完全な構文は、 shardCollection() メソッドの形式に従い、次のタイプのシャードキーを指定できます。
範囲キー
ハッシュされたキー
複合キー
完全な構文では、コレクションとシャーディングオプションを指定することもできます。
次の例では、 sson
フィールドに前述のタイプのそれぞれのシャードキーを作成します。
# Create a ranged shard key shard_key ssn: 1 # Create a compound shard key shard_key ssn: 1, country: 1 # Create a hashed shard key shard_key ssn: :hashed # Specify a shard key option shard_key {ssn: :hashed}, unique: true
短縮構文では、フィールド名のみを指定してシャードキーを宣言できます。 この構文は、範囲シャードキーと複合シャードキーのみをサポートし、コレクションまたはシャーディングオプションを指定することはできません。
次の例では、範囲シャードキーと複合シャードキーを作成します。
# Create a ranged shard key shard_key :ssn # Create a compound shard key shard_key :ssn, :country
関連フィールドと埋め込みフィールドの指定
フィールド名の代わりに、belongs_to
の関連付けにシャードキーを指定できます。 そうすると、Mongoid は関連付けられているコレクションのプライマリキーにシャードキーを作成します。
次の例では、 Person
モデル内の belongs_to
の関連付けにシャードキーを作成します。 関連付けられている country
コレクションには country_id
というプライマリキーがあるため、Mongoid はそのフィールドをシャーディングします。
class Person include Mongoid::Document belongs_to :country # Shards by country_id shard_key country: 1 # The collection must have an index that starts with the shard key index country: 1 end
ドット表記を使用してフィールド名を区切ることで、埋め込みドキュメントでシャードキーを指定できます。 次の例では、 address.city
フィールドにシャードキーを作成しています。
class Person include Mongoid::Document field :address shard_key "address.city" end
注意
Mongoid はピリオド(.
)文字が埋め込みフィールドを区切るために使用されるため、名前にピリオド文字が含まれるフィールドではシャードキーの作成をサポートしていません。
シャーディング管理レイテンシ
Mongoid モデルで定義されているシャードキーに従って、データベース内のコレクションをシャードするには、 db:mongoid:shard_collections
レイクタスクを実行中。 シャードキーで始まるインデックスがコレクションに含まれていることを確認するには、まず db:mongoid:create_indexes
レイテンシタスクを実行します。
次の レイク コマンドを実行してインデックスを作成し、モデルのシャードキーに基づいてコレクションをシャーディングします。
rake db:mongoid:create_indexes rake db:mongoid:shard_collections
インデックス管理とシャーディングレイクのタスクは、特定の モデルクラスでエラーが発生しても停止しません。 代わりに、エラーをログ、次のモデルの処理を続行します。 レイテンシ タスクでエラーが発生しなかったことを確認するには、アプリケーション用に構成された Mongoid ロガー の出力を確認します。
注意
シャーディングされたクラスターでスキーマ関連の操作を実行する場合、ノードには古くなったローカル構成関連のキャッシュデータが含まれる場合があります。 キャッシュをクリアするには、各 ノードで FlutterConfig mongos
コマンドを実行します。
詳細情報
MongoDBによるシャーディングの詳細については、 MongoDB Serverマニュアルの「 シャーディングガイド 」を参照してください。
API ドキュメント
shard_key
このガイドで説明されている マイクロについて詳しくは、 shard_key APIドキュメント を参照してください。