Docs Menu

シャーディング構成

シャーディング は、複数のマシンにデータを分散する方法です。 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 を使用したインデックス管理の詳細については、「 インデックス管理ガイド 」を参照してください。

がシャードキー のモデル化を宣言した場合、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マニュアルの「 シャーディングガイド 」を参照してください。

shard_keyこのガイドで説明されている マイクロについて詳しくは、 shard_key APIドキュメント を参照してください。