Overview
このガイドでは、 書込み保証( write concern ) 、 読み取り保証( read concern ) 、 読み込み設定( read preference ) の構成を使用して、MongoDB がレプリカセットに対して作成、読み取り、アップデート、削除(CRUD)操作を実行する方法を変更する方法を説明します。
これらの構成は、次のレベルで設定できます。
クライアント(オーバーライドされない限り、すべての操作実行にデフォルトを設定します)
トランザクション
Database
コレクション
このリストは、優先順位の昇順です。 例、クライアントレベルとデータベースレベルの両方で読み取り保証を設定すると、データベースレベルで指定された読み取り保証 (read concern)がクライアントレベルの読み取り保証 (read concern)よりも優先されます。
書込み保証 (write concern)
書込み保証 (write concern) は、書込み (write)操作が正常に返される前にMongoDBから要求される確認応答のレベルを指定します。 明示的な書込み保証( 書込み保証 (write concern) )を指定しない操作は、グローバルなデフォルトの書込み保証( 書込み保証 (write concern)設定を継承します。
書込み保証 (write concern)を設定するには、MongoClientSettings、MongoDatabaseSettings、または MongoCollectionSettingsオブジェクトに WriteConcern オプションを設定するか、クライアント、データベース、またはコレクションインスタンスの WithWriteConcern() メソッドを使用します。
WriteConcern オプションと WithWriteConcern() メソッドは、WriteConcernインスタンスをパラメータとして受け入れます。 次のいずれかの値を使用して、書込み保証 (write concern)を指定できます。
WriteConcern.Acknowledged: 書込み操作は、操作がメモリに書込まれた後に返します。WriteConcern.W1: 書込み (write)操作は、セカンダリ ノードからの確認を待つことなく、プライマリノードのみが書込み (write)操作を確認した後に返します。WriteConcern.W2: 書込み (write)操作は、プライマリノードと少なくとも 1 つのセカンダリノードが書込み (write)操作を確認した後に返します。WriteConcern.W3: 書込み (write)操作は、プライマリノードと少なくとも 2 つのセカンダリ ノードが書込み (write)操作を確認した後に返します。WriteConcern.WMajority: 書込み (write)操作は、レプリカセットのノードの過半数が書込み (write)操作を確認した後に返します。WriteConcern.Unacknowledged: 書込み (write)操作は、プライマリノードが書込み (write)操作を処理した後に返します。
次の例では、 MongoClientのインスタンスの書込み保証( 書込み保証 (write concern) )をWriteConcern.WMajorityに設定します。
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection string URI>"); mongoClientSettings.WriteConcern = WriteConcern.WMajority; var mongoClient = new MongoClient(mongoClientSettings);
次の例では、コレクションの書込み保証 ( 書込み保証 (write concern) ) をWriteConcern.WMajorityに設定します。
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithWriteConcern(WriteConcern.WMajority);
注意
クライアント、コレクション、データベースは不変
IMongoClient、IMongoDatabase、IMongoCollection のインスタンスは不変です。 クライアント、データベース、またはコレクションに書込み保証 (write concern)を設定すると、 メソッドは指定された設定を持つ新しいインスタンスを返し、元のインスタンスには影響しません。
書込み保証( 書込み保証 (write concern)) の詳細については、 MongoDB Serverマニュアルの書込み保証(write concern) を参照してください。
読み取り保証(read concern)
読み取り保証(read concern) は、次の動作を指定します。
読み取り保証 (read concern)を指定するには、MongoClientSettings、MongoDatabaseSettings、または MongoCollectionSettingsオブジェクトに ReadConcern オプションを設定するか、クライアント、データベース、またはコレクションで WithReadConcern() メソッドを使用します。
ReadConcern オプションと WithReadConcern() メソッドはどちらも、読み取り保証 (read concern)レベルを指定する単一のパラメータを受け入れます。
次の読み取り保証 (read concern)レベルを設定できます。
ReadConcern.Local: クエリは、インスタンスの最新データを返します。 レプリカセットのノードの過半数にデータが書き込まれたことを保証するものではありません。ReadConern.Available: クエリは、インスタンスの最新データを返します。 レプリカセットのノードの過半数にデータが書き込まれたことを保証するものではありません。ReadConcern.Availableは 因果整合性を持つセッションおよびトランザクションでは 使用できません 。ReadConcern.Majority: このクエリは、レプリカセットのノードの過半数が承認したデータを返します。ReadConcern.Linearizable: クエリは、読み取り操作の開始前に完了したすべての成功した書き込みを反映したデータを返します。ReadConcern.Linearizableは 因果整合性を持つセッションおよびトランザクションでは 使用できません 。ReadConcern.Snapshot: クエリでは、直近の特定の点のシャード全体に表示れる、過半数のコミット済みデータが返されます。
読み取り保証 ( 読み取り保証 (read concern) ) レベルの詳細については、 MongoDB Serverマニュアルの「読み取り保証(read concern) レベル 」を参照してください。
次の例では、 MongoClientのインスタンスの読み取り保証 (read concern)をReadConcern.Majorityに設定します。
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection string URI>"); mongoClientSettings.ReadConcern = ReadConcern.Majority; var mongoClient = new MongoClient(mongoClientSettings);
次の例では、コレクションの読み取り保証 (read concern)をReadConcern.Majorityに設定します。
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithReadConcern(ReadConcern.Majority);
読み取り保証 ( 読み取り保証 (read concern)) の詳細については、 MongoDB Serverマニュアルの「読み取り保証(read concern) 」を参照してください。
読み込み設定 (read preference)
読み込み設定 (read preference) は、クエリの実行中時にMongoDB がレプリカセットのどのノードを読み取るかを決定します。 読み込み設定 (read preference)は、MongoClientSettings、MongoDatabaseSettings、または MongoCollectionSettingsオブジェクトに ReadPreference オプションを設定するか、クライアント、データベース、またはコレクションで WithReadPreference() メソッドを使用することで設定できます。
ReadPreference オプションと WithReadPreference() メソッドは、読み込み設定 (read preference)モードをパラメーターとして受け入れます。 読み込み設定 (read preference)モードは、次のいずれかの値に設定できます。
ReadPreference.Primary: クエリは プライマリノードからのデータを返します。ReadPreference.PrimaryPreferred: クエリは、プライマリノードからのデータが使用可能な場合、返します。 それ以外の場合、クエリは セカンダリノードからのデータを返します。ReadPreference.Secondary: クエリは セカンダリノードからのデータを返します。ReadPreference.SecondaryPreferred: クエリは セカンダリノードからのデータを返します。それ以外の場合、クエリは プライマリノードからのデータを返します。ReadPreference.Nearest: クエリは、ネットワークレイテンシが最も低いノードからのデータを返します。
次の例では、 MongoClientのインスタンスの読み込み設定( 読み込み設定 (read preference) )をReadPreference.Secondaryに設定します。
var mongoClientSettings = MongoClientSettings.FromConnectionString("<connection string URI>"); mongoClientSettings.ReadPreference = ReadPreference.Secondary; var mongoClient = new MongoClient(mongoClientSettings);
次の例では、コレクションの読み込み設定( 読み込み設定 (read preference) )をReadPreference.Secondaryに設定しています。
var collection = database.GetCollection<BsonDocument>("<collection name>") .WithReadPreference(ReadPreference.Secondary);
読み込み設定 ( 読み込み設定 (read preference)) の詳細については、 MongoDB Serverマニュアルの読み込み設定(read preference) を参照してください。
API ドキュメント
このガイドで説明した型の詳細については、次のAPIドキュメントを参照してください。