レプリカセットに対する操作の構成
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) )は、クライアントまたはトランザクションで writeConcern()
メソッドを使用するか、データベースまたはコレクションでwithWriteConcern()
メソッドを使用して設定できます。
writeConcern()
メソッドとwithWriteConcern()
メソッドは、 WriteConcern
インスタンスをパラメータとして受け入れます。 次のいずれかの値を使用して、書込み保証 ( 書込み保証 (write concern) ) を指定できます。
WriteConcern.ACKNOWLEDGED
: 書込み操作は、操作がメモリに書込まれた後に返します。WriteConcern.W1
: 書込み (write)操作は、セカンダリ ノードからの確認を待つことなく、プライマリノードのみが書込み (write)操作を確認した後に返します。WriteConcern.W2
: 書込み (write)操作は、プライマリノードと少なくとも 1 つのセカンダリノードが書込み (write)操作を確認した後に返します。WriteConcern.W3
: 書込み (write)操作は、プライマリノードと少なくとも 2 つのセカンダリ ノードが書込み (write)操作を確認した後に返します。WriteConcern.MAJORITY
: 書込み (write)操作は、レプリカセットのノードの過半数が書込み (write)操作を確認した後に返します。WriteConcern.UNACKNOWLEDGED
: 書込み (write)操作は、プライマリノードが書込み (write)操作を処理した後に返します。WriteConcern.JOURNALED
: 書込み (write)操作は、プライマリノードがディスク上のジャーナルにデータを書込んだ後に返します。
次の例では、 MongoClient
のインスタンスの書込み保証( 書込み保証 (write concern) )を"majority"
に設定します。
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .writeConcern(WriteConcern.MAJORITY) .build(); MongoClient client = MongoClients.create(settings);
次の例では、コレクションの書込み保証 ( 書込み保証 (write concern) ) を"majority"
に設定します。
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withWriteConcern(WriteConcern.MAJORITY);
注意
コレクションとデータベースは不変
MongoDatabase
とMongoCollection
インスタンスは不変です。 データベースまたはコレクションに書込み保証 ( 書込み保証 (write concern) )を設定すると、 メソッドは新しいインスタンスを返し、元のインスタンスには影響しません。
書込み保証( 書込み保証 (write concern)) の詳細については、 MongoDB Serverマニュアルの書込み保証(write concern) を参照してください。
読み取り保証(read concern)
読み取り保証(read concern) は、次の動作を指定します。
読み取り保証 ( 読み取り保証 (read concern) ) は、クライアントまたはトランザクションで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
に設定します。
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .readConcern(ReadConcern.MAJORITY) .build(); MongoClient client = MongoClients.create(settings);
次の例では、コレクションの読み取り保証 (read concern)をReadConcern.MAJORITY
に設定します。
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withReadConcern(ReadConcern.MAJORITY);
読み取り保証 ( 読み取り保証 (read concern)) の詳細については、 MongoDB Serverマニュアルの「読み取り保証(read concern) 」を参照してください。
読み込み設定 (read preference)
読み込み設定 (read preference) は、クエリの実行中時にMongoDBがレプリカセットのどのノードを読み取るかを決定します。 読み込み設定( 読み込み設定 (read preference) )は、クライアントまたはトランザクションでreadPreference()
メソッドを使用するか、データベースまたはコレクションでwithReadPreference()
メソッドを使用して設定できます。
readPreference()
メソッドとwithReadPreference()
メソッドは、読み込み設定( 読み込み設定 (read preference) )モードをパラメータとして受け入れます。 読み込み設定 ( 読み込み設定 (read preference) )モードは、次のいずれかの値に設定できます。
ReadPreference.primary()
: クエリは プライマリノードからのデータを返します。ReadPreference.primaryPreferred()
: クエリは、プライマリノードからのデータが使用可能な場合、返します。 それ以外の場合、クエリは セカンダリノードからのデータを返します。ReadPreference.secondary()
: クエリは セカンダリノードからのデータを返します。ReadPreference.secondaryPreferred()
: クエリは セカンダリノードからのデータを返します。それ以外の場合、クエリは プライマリノードからのデータを返します。ReadPreference.nearest()
: クエリは、ネットワークレイテンシが最も低いノードからのデータを返します。
次の例では、 MongoClient
のインスタンスの読み込み設定( 読み込み設定 (read preference) )をReadPreference.secondary()
に設定します。
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .readPreference(ReadPreference.secondary()) .build();
次の例では、コレクションの読み込み設定( 読み込み設定 (read preference) )をReadPreference.secondary()
に設定しています。
MongoCollection<Document> collection = database.getCollection("<collection name>"); collection = collection.withReadPreference(ReadPreference.secondary());
読み込み設定 ( 読み込み設定 (read preference)) の詳細については、 MongoDB Serverマニュアルの読み込み設定(read preference) を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。