Overview
このガイドでは、 Rustドライバー で読み取りおよび書込み操作を構成する方法を学習できます。
読み取り設定と書込み設定
読み込み設定( read preference ) を設定することで、ドライバーが読み取り操作をルーティングする方法を制御できます。 また、読み取り保証 ( read concern ) と書込み保証 ( write concern ) を設定して、ドライバーがレプリカセットでの読み取りおよび書込み (write) 操作の確認を待機する方法のオプションも制御できます。
Clientデフォルトでは 、データベースは インスタンスからこれらの設定を継承し、コレクションはデータベースからこれらを継承します。ただし、 database_with_options() または collection_with_options() メソッドを使用して、データベースまたはコレクションのカスタム読み取りまたは書込み設定を設定できます。これらのメソッドは、指定された設定を持つ新しいDatabase またはCollection インスタンスを作成します。
読み取りまたは書込み設定を構成するには、ReadConcern、WriteConcern、または選択基準のインスタンスを作成し、それをオプション ビルダに渡します。
Tip
読み取りおよび書込み設定の詳細については、MongoDB Server マニュアルの次のガイドを参照してください。
次のセクションでは、クライアント、データベース、コレクションレベルで読み取りと書込みを設定する方法を示します。
クライアント構成
この例では、 オブジェクトを Client::with_options() メソッドに渡すことで、 インスタンスの読み込み設定(読み込み設定 (read preference)、読み取り保証 (read concern))、書込み保証 (write concern)を設定する方法を示しています。このコードは、次の設定を構成します。ClientClientOptions
Secondary読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は セカンダリレプリカセットメンバーからデータを取得しますlocal読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証しますMajority書込み保証( 書込み保証 (write concern) ) : すべてのレプリカセットの過半数が書込み(write)操作を確認する必要があります
let read_preference = ReadPreference::Secondary { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::local(); let write_concern = WriteConcern::builder().w(Acknowledgment::Majority).build(); let client_options = ClientOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let client = Client::with_options(client_options)?;
あるいは、次の例に示すように、接続 URI で読み取り設定と書込み設定を指定し、その URI を Client::with_uri_str() コンストラクターに渡すこともできます。
let uri = "<connection string>/?readPreference=secondary&readConcernLevel=local&w=majority"; let client = Client::with_uri_str(uri).await?;
データベース構成
この例では、 オブジェクトをtest_database DatabaseOptionsdatabase_with_options() メソッドに渡すことで、 という名前のデータベースの 読み込み設定(読み込み設定 (read preference)、読み取り保証 (read concern)) 、 書込み保証(書込み保証 (write concern) ) を設定する方法を示しています。このコードは、次の設定を構成します。
PrimaryPreferred読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は、プライマリレプリカセットメンバーからデータを取得します。プライマリが使用できない場合は セカンダリ メンバーからデータが取得されますavailable読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証しますmajority書込み保証( 書込み保証 (write concern) ) : すべてのレプリカセットの過半数が書込み(write)操作を確認する必要があります
let read_preference = ReadPreference::PrimaryPreferred { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::available(); let write_concern = WriteConcern::majority(); let database_options = DatabaseOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let database = client.database_with_options("test_database", database_options);
コレクション構成
この例では、 オブジェクトをtest_collection CollectionOptionscollection_with_options() メソッドに渡すことで、 という名前のコレクションの読み込み設定(読み込み設定 (read preference)、読み取り保証 (read concern))、書込み保証(書込み保証 (write concern) )を設定する方法を示しています。このコードは、次の設定を構成します。
SecondaryPreferred読み込み設定 (read preference)) : 読み取り操作は、セカンダリレプリカセットメンバーからデータを取得します。セカンダリが使用できない場合は、プライマリ ノードからデータが取得されます。available読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証しますw: 0書込み保証 (write concern):クライアントは書込み (write ) 操作の確認応答をリクエストしません。
let read_preference = ReadPreference::SecondaryPreferred { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::available(); let write_concern = WriteConcern::builder().w(0.into()).build(); let collection_options = CollectionOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let collection = database.collection_with_options("test_collection", collection_options);
再試行可能な読み取りと書込み
Rustドライバーは、ネットワークまたはサーバーのエラーにより失敗した場合、特定の読み取りおよび書き込み操作を 1 回自動的に再試行します。
ClientOptionsインスタンスを構築するときに、retry_reads または retry_writes オプションを false に設定することで、再試行可能な読み取りまたは再試行可能な書込みを明示的に無効にすることができます。次の例では、クライアントの再試行可能な読み取りと書込みを無効にします。
let client_options = ClientOptions::builder() .retry_reads(false) .retry_writes(false) .build(); let client = Client::with_options(client_options)?;
サポートされている再試行可能な読み取り操作の詳細については、 MongoDB Serverマニュアルの「 再試行可能な読み取り 」を参照してください。サポートされている再試行可能な書込み操作の詳細については、 MongoDB Serverマニュアルの「 再試行可能な書込み 」を参照してください。
照合
照合を指定して、読み取り操作と書込み操作の動作を変更できます。照合は、大文字と小文字やアクセント記号など、string を比較するための言語固有のルールのセットです。
照合の詳細とコード例については、「 照合ガイド 」を参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。