Overview
レプリカセットのどのノードから読み取るかを選択するには、 Java Reactive Streams ドライバーを使用して読み込み設定 (read preference) を構成します。 さらに、読み取り保証を構成することで、レプリカセットやシャーディングされたクラスターから読み取られたデータの整合性と分離プロパティを制御できます。 このガイドでは、 MongoDB Java Reactive Streams ドライバーを使用して 読み込み設定 (read preference) と読み取り保証 (read concern) を構成する方法を学習できます。
読み込み設定( 読み込み設定 (read preference) )と読み取り保証( 読み取り保証 (read concern) )は、次のレベルで構成できます。
MongoDBデプロイの場合
データベース用
コレクション用
配置レベルでの読み込み設定(read preference)の構成
配置レベルで次の方法で読み込み設定( 読み込み設定 (read preference) )を構成できます。
次のコードに示すように、
MongoClientSettingsインスタンスを作成します。MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://host1,host2")) .readPreference(ReadPreference.secondary()) .build()); 次のコードに示すように、
ConnectionStringインスタンスを作成します。MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readPreference=secondary");
データベースまたはコレクション レベルでの読み込み設定(read preference)の構成
読み込み設定( 読み込み設定 (read preference) )は、データベースまたはコレクションレベルで次の方法で構成できます。
次のコードに示すように、
withReadPreference()メソッドを使用してMongoDatabaseで を実行します。MongoDatabase database = mongoClient.getDatabase("test") .withReadPreference(ReadPreference.secondary()); 次のコードに示すように、
withReadPreference()メソッドを使用してMongoCollectionで を実行します。MongoCollection<Document> collection = database.getCollection("restaurants") .withReadPreference(ReadPreference.secondary());
MongoDatabase とMongoCollectionインスタンスは不変です。 既存のMongoDatabaseまたはMongoCollectionインスタンスでwithReadPreference()を呼び出すと、新しい インスタンスが返されますが、メソッドが呼び出されるインスタンスには影響しません。
次の例では、 collectionWithReadPrefインスタンスの読み込み設定( 読み込み設定 (read preference) )はprimaryPreferredで、 collectionの読み込み設定( 読み込み設定 (read preference) )は影響を受けません。
MongoCollection<Document> collectionWithReadPref = collection.withReadPreference(ReadPreference.primaryPreferred());
配置レベルでの読み取り保証の構成
配置レベルで次の方法で読み取り保証 (read concern)を構成できます。
次のコードに示すように、
MongoClientSettingsインスタンスを作成します。MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://host1,host2")) .readConcern(ReadConcern.MAJORITY) .build()); 次のコードに示すように、
ConnectionStringインスタンスを作成します。MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?readConcernLevel=majority");
データベースまたはコレクション レベルでの読み取り保証の構成
読み取り保証 (read concern)は、データベースまたはコレクションレベルで次の方法で構成できます。
次のコードに示すように、
withReadConcern()メソッドを使用してMongoDatabaseで を実行します。MongoDatabase database = mongoClient.getDatabase("test") .withReadConcern(ReadConcern.MAJORITY); 次のコードに示すように、
withReadConcern()メソッドを使用してMongoCollectionで を実行します。MongoCollection<Document> collection = database.getCollection("restaurants") .withReadConcern(ReadConcern.MAJORITY);
MongoDatabase とMongoCollectionインスタンスは不変です。 既存のMongoDatabaseまたはMongoCollectionインスタンスでwithReadConcern()を呼び出すと、新しい インスタンスが返されますが、メソッドが呼び出されるインスタンスには影響しません。
次の例では、 collWithReadConcernインスタンスにはAVAILABLEの読み取り保証がありますが、 collectionの読み取り保証には影響がありません。
MongoCollection<Document> collWithReadConcern = collection.withReadConcern(ReadConcern.AVAILABLE);
読み取り保証、読み込み設定 (read preference)、書込み保証 (write concern) の組み合わせ
MongoClientSettings 、 MongoDatabase 、またはMongoCollectionインスタンスをビルドすると、読み取り保証、読み込み設定(read preference)、書込み保証(write concern)の組み合わせを含めることができます。
たとえば、次のコードでは、コレクション レベルで 3 つすべてを設定します。
collection = database.getCollection("restaurants") .withReadPreference(ReadPreference.primary()) .withReadConcern(ReadConcern.MAJORITY) .withWriteConcern(WriteConcern.MAJORITY);
詳細情報
読み込み設定( 読み込み設定 (read preference) ) の詳細については、 MongoDB Serverマニュアルの読み込み設定(read preference)ガイドを参照してください。 読み取り保証 ( 読み取り保証 (read concern) ) の詳細については、 MongoDB Serverマニュアルの「読み取り保証 (read concern) 」のガイドを参照してください。