Docs Menu
Docs Home
/
MongoDB マニュアル
/ /

レプリカセットの書込み保証 (write concern)

項目一覧

  • レプリカセットへの書込み (write) 操作の確認
  • デフォルトの書込み保証 (write concern) の変更
  • カスタムの書込み保証 (write concern)

レプリカセットの書込み保証 (write concern) は、書込み (write) 操作が成功として返される前に書込み (write) 操作を確認する必要があるデータ保持ノード(プライマリおよびセカンダリであるが、アービタでない)の数を示します。ノードは、書込み (write) を正常に受信して適用した後にのみ、書込み (write) 操作を確認できます。

レプリカセットの場合:

書込み (write) 確認応答についての詳細なドキュメントは、「確認応答動作」を参照してください。

書込み保証 (write concern) レベルが ``w: "majority"`` のレプリカセットへの書込み (write) 操作、またはプライマリと少なくとも 1 つのセカンダリへの書込み (write)。

書込み保証 (write concern) 確認応答を必要とする書込み (write) 操作を発行するアプリケーションは、プライマリが、指定された書込み保証 (write concern) に必要な数のノードから確認応答を受信するまで待機します。書込み保証 (write concern) の w が 1 または w : "majority" の場合、プライマリは、必要な数のセカンダリが書込み (write) を確認してから、書込み保証 (write concern) 確認応答を返します。w: 1 の書込み保証 (write concern) の場合は、プライマリは要求された書込み保証 (write concern) に貢献する資格があるため、ローカルで書込み (write) が適用されるとすぐに書込み保証 (write concern) 確認応答を返すことができます。

書込み (write) を確認するノードが多いほど、プライマリに障害が発生した場合に、書込まれたデータがロールバックされる可能性は低くなります。ただし、書込み保証 (write concern) を高く指定すると、クライアントは要求されたレベルの書込み保証 (write concern) 確認応答を受信するまで待機する必要があるため、レイテンシが増加する可能性があります。

特定の書込み (write) 操作に最適な書込み保証 (write concern) を選択するかどうかは、アプリケーションのパフォーマンス目標とデータ耐久性要件によって異なります。ロールバックを防止するための書込み保証 (write concern) の構成に関する詳細なガイダンスについては、「レプリカセットのロールバックの回避」を参照してください。

次の操作には、insertOne() メソッドの writeConcern オプションが含まれています。この操作では、"majority" 書込み保証 (write concern)、および 5 秒のタイムアウトを指定します。

wtimeout 書込み保証 (write concern) パラメーターは、操作が無期限にブロックされないことを保証します。

db.products.insertOne(
{ item: "envelopes", qty : 100, type: "Clasp" },
{ writeConcern: { w: "majority" , wtimeout: 5000 } }
)

アプリケーションは、プライマリが書込み保証 (write concern) 確認応答を返すまで待機します。この応答は、データを保持する投票ノードの計算された過半数が書込み (write) 操作を確認したことを示します。たとえば、3 ノードのレプリカセット(P-S-S)では、操作には 3 つのノードのうち 2 つのノードからの確認応答が必要です。レプリカセットが後で拡張され、投票するセカンダリ ノードが 2 つ追加された場合、これと同じ操作に 5 つのレプリカセット ノードのうち 3 つからの確認応答が必要です。プライマリが wtimeout 制限内に書込み保証 (write concern) 確認応答を返さない場合、書込み (write) 操作は書込み保証 (write concern) エラーで失敗します。

指定された書込み保証 (write concern) を待機している間に書込み (write) 操作がタイムアウトになるのは、必要な数のレプリカセット ノードが wtimeout 時間内に書込み (write) 操作を確認しなかったことを示しているだけです。これは必ずしもプライマリが書込み (write) 込みを適用できなかったことを示すものではありません。データは、書込み保証 (write concern) エラー発生時にレプリカセット ノードのサブセットに存在している可能性があり、クラスター内のすべてのノードにそのデータが含まれるまで複製を続けることができます。アプリケーションでは、書込み保証 (write concern) 確認応答の状況にかかわらず、書込まれたデータが利用できる可能性があることを考慮する必要があります。

書込み保証 (write concern) を指定するための正確な構文は、書込み (write) 操作によって異なります。書込み保証 (write concern) のサポートと構文の手順については、書込み (write) 操作のマニュアルを参照してください。書込み保証 (write concern) に関する詳細なドキュメントについては、「書込み保証 (write concern)」を参照してください。

setDefaultRWConcern コマンドを発行すると、レプリカセットのデフォルトの書込み保証 (write concern) を変更できます。

特定の書込み保証 (write concern) を使用して書込み (write) 操作を発行すると、書込み (write) 操作はデフォルトではなく独自の書込み保証 (write concern) を使用します。

Tip

以下も参照してください。

レプリカセットのノードにタグ付けし、結果のタグセットを使用してカスタムの書込み保証 (write concern) を作成できます。タグセットを使用してカスタムの書込み保証 (write concern) を構成する方法については、「レプリカセットのタグセットの構成」を参照してください。

戻る

読み取りと書込みセマンティクス