Overview
このガイドでは、 書込み保証( write concern ) 、 読み取り保証( read concern ) 、 読み込み設定( read preference ) の構成を使用して、MongoDB がレプリカセットに対して作成、読み取り、アップデート、削除(CRUD)操作を実行する方法を変更する方法を説明します。
次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。
クライアント(オーバーライドされない限り、すべての操作実行にデフォルトを設定します)
セッション
トランザクション
Database
コレクション
前のリストは、 オプション設定の優先順位の増加順も示しています。例、トランザクションに読み取り保証 (read concern)レベルを設定すると、クライアントに設定された読み取り保証 (read concern)レベルが上書きされます。
これらのオプションを使用すると、レプリカセット内のデータの因果整合性と可用性をカスタマイズできます。
書込み保証 (write concern)
書込み保証 (write concern) は、挿入や更新などの書込み (write) 操作について MongoDB から要求される確認応答のレベルを指定します。その後、操作は正常に返されます。 明示的な書込み保証(write concern)を指定しない操作は、グローバルなデフォルトの書込み保証(write concern)設定を継承します。
詳細については、 MongoDB Serverマニュアルの 書込み保証 (write concern) を参照してください。詳細なAPIドキュメントについては、書込み保証 (write concern) APIドキュメントを参照してください。
次の表では、 write_concern
パラメータについて説明しています。
Parameter | タイプ | 説明 |
---|---|---|
| 整数または文字列 | 指定された数の |
| integer | 書込み (write) 操作が無期限にブロックされないように時間制限を指定します。 |
| ブール値 | 書き込み (write)操作が ディスク上のジャーナルに書き込まれたことの確認を要求します。 |
例: 単一の書込み操作の書込み保証 (write concern) の設定
次のコードでは、新しいドキュメントを作成し、w
と wtimeout
の書込み保証 (write concern)設定を指定します。
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'myDB') myDB = client.database myCollection = myDB[:myCollection] myCollection.insert_one( { name: 'anotherDocumentName' }, write: { w: 2, wtimeout: 5000 } )
例: 既存の書込み保証 (write concern) を取得して適用
次のコードでは、new_write_concern
メソッドを使用して、既存のデータベース参照(myDB
)のオプションから write_concern
を構築します。次に、新しい書込み保証 (write concern)が挿入されたドキュメントに適用されます。
myDoc = { name: 'New Document' } new_write_concern = Mongo::WriteConcern.get(myDB.write_concern) myDB[:myCollection].with(write: new_write_concern).insert_one(myDoc)
注意
myDB
は、 書込み保証 (write concern)オプションを受け入れる任意のエンティティへの参照に置き換えることができます。
読み取り保証(read concern)
読み取り保証 (read concern) は、次の動作を指定します。
読み取り保証 (read concern)設定は、level
パラメータを使用して指定できます。デフォルトの読み取り保証 (read concern)レベルは local
です。つまり、クライアントは接続先のレプリカセットクライアントからデータを返しますが、そのデータがすべてのレプリカセットメンバーに書き込まれた保証はありません。
注意
読み取り保証 (read concern)レベル 要件を低くすると、レイテンシが削減される可能性があります。
読み取り保証 (read concern) または読み取り保証 (read concern)レベルの詳細については、 MongoDB Serverマニュアルの「 読み取り保証 (read concern) 」を参照してください。read_concern
のタイプと読み取り保証 (read concern)レベルの定義の詳細については、 APIドキュメントの「 読み取り保証(read concern) 」を参照してください。
例: 集計の読み取り保証レベルの設定
次のコードでは、集計の読み取り保証 (read concern)レベルを "available"
に設定します。
pipeline = [ { "$match" => { category: 'KITCHENWARE' } }, { "$unset" => ['_id', 'category'] } ] result = myCollection.aggregate(pipeline, read: { read_concern: { level: :available } })
Tip
集計操作の詳細については、集計によるデータの変換ガイドをご覧ください。
例: データベースの読み取り保証を変更する
次のコードでは、データベースの読み取り保証 (read concern)レベルを "local"
に変更します。
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'mydb', read_concern: { level: :local }) myDB = client.database
読み込み設定 (read preference)
読み込み設定 (read preference) は、クエリの実行中時にMongoDB がレプリカセットのどのノードを読み込むかを決定します。
詳細なAPIドキュメントについては、読み込み設定 (read preference) APIドキュメントを参照してください。
次の表には、サーバーがメンバーを評価する方法をカスタマイズするために使用できるオプションが示されています。
Parameter | タイプ | 説明 |
---|---|---|
|
| サーバーが読み取りを行うレプリカセット メンバーの要件または設定を指定します。 デフォルト モード、 |
|
| セカンダリ レプリカセット ノードにタグを割り当てて、サーバーによる評価方法をカスタマイズします。 |
|
| 読み込み設定(read preference)に適用できるヘッジやmaxStalenessSecondsなどのさまざまなオプションを設定します。 |
例: トランザクションの読み込み設定(read preference)と保証の設定
次のコードは、トランザクション内の操作の読み込み設定 (read preference)、読み取り保証 (read concern)) 、書込み保証 (write concern)を設定します。
transaction_options = { read: { mode: :primary }, read_concern: { level: :local }, write_concern: { w: :majority } } session = client.start_session session.start_transaction(transaction_options) session.commit_transaction # ... rescue => e session.abort_transaction puts "Transaction aborted due to an error: #{e.message}" ensure session.end_session end
Tip
トランザクションの詳細については、トランザクションガイドを参照してください。
例: 接続stringでクラスターの読み込み設定(read preference)を設定する
次のコード例では、クラスターでクエリを実行するときに secondary
読み込み設定 (read preference)モードを使用する MongoClient
を作成します。
uri = 'mongodb+srv://<user>:<password>@<cluster-url>' options = { read: { mode: :secondary, max_staleness: 120 } } client = Mongo::Client.new(uri, options) myDB = client.database
上記の例では、maxStalenessSeconds
オプションも 120
に設定されています。接続文字列オプションの詳細については、 MongoDB Serverマニュアルの「 接続文字列オプション 」セクションを参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。