レプリカセットでの CRUD 操作の実行方法の指定
項目一覧
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)設定を継承します。
詳細については、サーバー マニュアルの 書込み保証 (write concern) を参照してください。詳細なAPIドキュメントについては、 WriteConcern APIドキュメント を参照してください。
次の表では、 WriteConcern
パラメータについて説明しています。
Parameter | タイプ | 説明 |
---|---|---|
w (任意) | 指定された数の mongod インスタンスまたは指定されたタグを持つmongod インスタンスに、書込み (write) 操作が反映されたことの確認応答を要求します。 | |
wtimeoutMS (任意) | 数値 | 書込み (write) 操作が無期限にブロックされないように時間制限を指定します |
journal (任意) | ブール値 | 書き込み操作がオンディスクのジャーナルに書き込まれたことの確認を要求する |
例: 単一の書込み操作の書込み保証 (write concern) の設定
このコードは、ドキュメントの新しい作成時にカスタムWriteConcern
設定を使用します。
myDB.myCollection.insertOne( { name: "anotherDocumentName" }, { writeConcern: { w: 2, wtimeoutMS: 5000 } } );
例: 既存の書込み保証 (write concern) を取得して適用
このコードでは、 fromOptions()
メソッドを使用して、既存のデータベース参照myDB
のオプションからWriteConcern
を構築します。 myDB
は、書込み保証オプションを受け入れる任意のエンティティへの参照に置き換えることができることに注意してください。 次に、新しい書込み保証(write concern)がドキュメントmyDoc
に適用されます。
const newWriteConcern = WriteConcern.fromOptions(myDB); const myDoc = { name: "New Document" }; WriteConcern.apply(myDoc,newWriteConcern);
読み取り保証(read concern)
読み取り保証 (read concern) は、次の動作を指定します。
読み取り保証 (read concern) 設定は、 level
パラメータを使用して指定できます。 デフォルトの読み取り保証 (read concern) レベルはlocal
です。 つまり、クライアントは接続先のレプリカセット メンバーからデータを返しますが、そのデータがすべてのレプリカセット メンバーに書き込まれた保証はありません。 読み取り保証 (read concern) レベル 要件を低くすると、レイテンシが削減される可能性があることに注意してください。
読み取り保証 (read concern) または読み取り保証 (read concern) レベルの詳細については、サーバー マニュアルの「読み取り保証(read concern) 」を参照してください。 ReadConcern
のタイプと読み取り保証(read concern)レベルの定義の詳細については、「 ReadConcern 」を参照してください API ドキュメントを参照してください。
例: 集計の読み取り保証レベルの設定
このコードでは、集計の読み取り保証レベルを"majority"
に設定します。
const pipeline = [ {"$match": { category: "KITCHENWARE", }}, {"$unset": [ "_id", "category", ]} ]; result = await myDB.collection("mycollection") .aggregate( pipeline, { readConcern: { level: "available" } } );
集計の詳細については、 集計ページをご覧ください。
例: データベースの読み取り保証を変更する
次のコードは、データベースの読み取り保証(read concern)レベルを"local"
に変更します。
const options = { readConcern: { level: "local" } }; const myDB = client.db("mydb", options);
読み込み設定 (read preference)
読み込み設定 (read preference) は、クエリの実行時に MongoDB がレプリカセットのどのノードを読み込むかを決定します。 サーバーがメンバーを評価する方法をカスタマイズすることもできます。
API詳しくは、 ReadPreference ドキュメントAPI 参照してください。
以下の表では、 ReadPreference
パラメータを説明しています。
Parameter | タイプ | 説明 |
---|---|---|
mode | サーバーが読み取りを行うレプリカセット メンバーの要件または設定を指定します。 デフォルト モード、 primary では、レプリカセットのプライマリ メンバーから操作によって読み取りが行われることを指定します。 | |
tags (任意) | セカンダリ レプリカセット ノードにタグを割り当てて、サーバーによる評価方法をカスタマイズします。 primary 読み込み設定(read preference)モード設定では、タグは使用できません。 | |
options (任意) | 読み込み設定(read preference)に適用できるヘッジやmaxStalenessSecondsなどのさまざまなオプションを設定します。 |
例: トランザクションの読み込み設定(read preference)と保証の設定
このコードは、トランザクション内の操作の読み込み設定(read preference)、読み取り保証(read concern)、書込み保証(write concern)を設定します。
const transactionOptions = { readPreference: "primary", readConcern: { level: "local" }, writeConcern: { w: "majority" }, }; const session = client.startSession(); session.startTransaction(transactionOptions); // ... await session.commitTransaction(); await session.endSession();
トランザクションの詳細については、「トランザクション 」を参照してください。
例: 接続stringでクラスターの読み込み設定(read preference)を設定する
このコード例では、クラスターでクエリを実行するときに「セカンダリ」の読み込み設定(read preference)モードを使用する MongoClient を作成します。
const uri = "mongodb+srv://<user>:<password>@<cluster-url>?readPreference=secondary&maxStalenessSeconds=120"; const client = new MongoClient(uri);
この例では、 maxStalenessSeconds
オプションも設定しています。 接続stringオプションの詳細については、マニュアルの「接続stringオプション 」セクションを参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。