Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Ruby ドライバー

レプリカセットでのCRUD操作

このガイドでは、 書込み保証( write concern ) 、 読み取り保証( read concern ) 、 読み込み設定( read preference ) の構成を使用して、MongoDB がレプリカセットに対して作成、読み取り、アップデート、削除(CRUD)操作を実行する方法を変更する方法を説明します。

次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。

  • クライアント(オーバーライドされない限り、すべての操作実行にデフォルトを設定します)

  • セッション

  • トランザクション

  • Database

  • コレクション

前のリストは、 オプション設定の優先順位の増加順も示しています。例、トランザクションに読み取り保証 (read concern)レベルを設定すると、クライアントに設定された読み取り保証 (read concern)レベルが上書きされます。

これらのオプションを使用すると、レプリカセット内のデータの因果整合性と可用性をカスタマイズできます。

書込み保証 (write concern) は、挿入や更新などの書込み (write) 操作について MongoDB から要求される確認応答のレベルを指定します。その後、操作は正常に返されます。 明示的な書込み保証(write concern)を指定しない操作は、グローバルなデフォルトの書込み保証(write concern)設定を継承します。

詳細については、 MongoDB Serverマニュアルの 書込み保証 (write concern) を参照してください。詳細なAPIドキュメントについては、書込み保証 (write concern) APIドキュメントを参照してください。

次の表では、 write_concernパラメータについて説明しています。

Parameter
タイプ
説明

w (任意)

整数または文字列

指定された数の mongod インスタンスまたは指定されたタグを持つラベルの付いた mongod インスタンスに、書込み (write)操作が反映されたことの確認応答を要求します。

wtimeoutMS (任意)

integer

書込み (write) 操作が無期限にブロックされないように時間制限を指定します。

journal (任意)

ブール値

書き込み (write)操作が ディスク上のジャーナルに書き込まれたことの確認を要求します。

次のコードでは、新しいドキュメントを作成し、wwtimeout の書込み保証 (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
}
)

次のコードでは、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)設定は、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) は、クエリの実行中時にMongoDB がレプリカセットのどのノードを読み込むかを決定します。

詳細なAPIドキュメントについては、読み込み設定 (read preference) APIドキュメントを参照してください。

次の表には、サーバーがメンバーを評価する方法をカスタマイズするために使用できるオプションが示されています。

Parameter
タイプ
説明

mode

Symbol

サーバーが読み取りを行うレプリカセット メンバーの要件または設定を指定します。 デフォルト モード、 :primaryでは、レプリカセットのプライマリ メンバーから操作によって読み取りが行われることを指定します。

tags (任意)

Array<Hash>

セカンダリ レプリカセット ノードにタグを割り当てて、サーバーによる評価方法をカスタマイズします。 :primary読み込み設定(read preference)モード設定では、タグは使用できません。

options (任意)

Hash

読み込み設定(read preference)に適用できるヘッジmaxStalenessSecondsなどのさまざまなオプションを設定します。

次のコードは、トランザクション内の操作の読み込み設定 (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

トランザクションの詳細については、トランザクションガイドを参照してください。

次のコード例では、クラスターでクエリを実行するときに 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ドキュメントを参照してください。

戻る

GridFSを使用した大容量のファイルの保存