[解決済み] mongodの書き込みに関するデフォルトの懸念はどのバージョンにありますか?
質問内容
で見つけられませんでした。 mongodb のドキュメント デフォルトの書き込みに関する懸念と、"Acknowledgeed Write" がどのように定義されるかについてです。 これは異なるmongodbのバージョンを通して変更されているようで、以下のように表示されます。 v3.2ドキュメント 例えば
3.2.6 より前のバージョンでは、ジャーナリングが有効な場合、w: "majority" は j: true を意味します。それ以前のバージョンの MongoDB では、w: majority" はジャーナリングを意味しません。
または
バージョン3.0で変更されました。MongoDB 3.0 より前のバージョンでは、w: "majority" はレプリカセットのメンバーの過半数を指します。
または
バージョン 2.6 で変更: マスター/スレーブ展開の場合、MongoDB は w: "majority" を w: 1 と同じものとして扱います。
また、"majority" がすべての投票ノードを指しているのも気になるところです。 v3.2ドキュメント :
書き込み操作がプライマリを含む大多数の投票ノード[1]に伝搬されたことの確認を要求する。
アービターも投票ノードなので、カウントされるということでしょうか。つまり、例えば2つのデータ保持ノードと1つのアービターからなるreplSetがある場合、書き込み懸念 "majority"を持つ書き込み操作は、残りのデータ保持ノードとアービター、つまり過半数に認められたので、1つのデータ保持ノードがダウンしても成功するのですか?
解決方法は?
MongoDBのデフォルトの書き込みに関する懸念は、これまで
w:1
2012年のMongoDB 2.2までさかのぼります。
現在の MongoDB のバージョン (バージョン 3.2.6 以降) では、書き込みの懸念を設定するために 3 つの異なる設定があります。
-
w
設定 : 書き込みが成功したと宣言する前に、何台のノードが書き込みを確認する必要があるか。デフォルトは1、つまりプライマリノードからの承認で十分である。 -
j
設定 : 書き込みが認識される前にジャーナルされなければなりませんか?デフォルトはwriteConcernMajorityJournalDefault
. -
writeConcernMajorityJournalDefault(ライトコンサーマリティジャーナルデフォルト
を指定した場合。
w:majority
を設定せずに、書き込みに対する懸念の設定を書き込みます。j
は何ですか?j
の値は?デフォルトはtrue
(書き込みは、承認される前に、大多数の投票ノードでジャーナルされるべきです)。
もあります。
wtimeout
設定
で、書き込みが承認されなかったことをクライアントに通知するまでに MongoDB が書き込みの懸念を満たすのをどれだけ待つかを設定します。そうしないと、書き込みが完了するのをずっと待っていることになり、 書き込みが失敗してしまいます。
ここで特別に設定するのは
w:majority
. これは、書き込みが
投票ノードの大多数
(そして、そのジャーナルにも)レプリカセットで承認されるようにします。これは間違いなく、良いパフォーマンスを提供しつつ、最も安全な設定です。
- 確認済み書き込みが、障害発生時にロールバックされるのを防ぐことができる。
- アプリケーションのスループットを調整し、レプリカセットが処理できる速度よりも速い書き込みを送信しないようにします(ハードウェアの制約、ネットワークの状況などによる)。
ご想像の通りです。
投票ノードには、アービターが含まれます。
. したがって、一次・二次・アービターの設定があるレプリカセットでは
w:majority
というシナリオでは失敗する可能性があります。
- データを持つノードの1つが何らかの理由でオフラインになる。
- トポロジーがプライマリ-アービタ-オフラインになったので、レプリカセットは書き込み可能なプライマリでまだオンラインです。
-
で書き込みます。
w:1
は通常通り成功しますが、これらの書き込みはロールバックされる可能性があります(投票データを持つノードの大多数に書き込まれていないため)。 -
アービターがデータを運ばないため
w:majority
の書き込みは、アービターが投票ノードとしてカウントされるため、失敗します(または、無期限に待機します)。
このような理由から、アービターを使用することは
w:majority
を使用します。
シャードクラスタのシャードを形成する3ノードのレプリカセットでアービターを使用することも推奨されないことに注意してください。
w:majority
. 1つのシャードでデータを持つノードに障害が発生すると、チャンクの移行操作に不利になります。
関連
-
[解決済み】MongoDBシェルですべてのコレクションを一覧表示するには?
-
[解決済み] E: mongodb-org パッケージが見つかりません。
-
[解決済み] 複合リテラルのキー無しフィールドの使用
-
[解決済み] MongoDB Compass フィルタ (クエリ)
-
[解決済み] MongoDBでコレクションを削除するには?
-
[解決済み] 条件付きでMongoDBを更新する
-
[解決済み] 配列フィールドが空でない MongoDB レコードを検索する
-
undefinedエラー: getaddrinfo ENOTFOUND localhost または MongoDB connected disconnected
-
[解決済み] MongoDBの命名規則とは何ですか?
-
[解決済み] MongoDBでフィールドが存在することを確認する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MongoDbがコード100でシャットダウンする【終了しました
-
[解決済み] MongoDB ドキュメントからフィールドを完全に削除する方法は?
-
[解決済み] 同じデータベース内でコレクションをコピーする最も速い方法は何ですか?
-
[解決済み] mongodb サービスが開始されない
-
[解決済み] SocketException: アドレスはすでに使用中です MONGODB
-
[解決済み】Node.jsでMongooseを使用してページングする方法は?
-
[解決済み】MongoDBで、あるデータベースから別のデータベースにコレクションをコピーする方法
-
[解決済み】Node.js Mongoose.js の文字列を ObjectId に変換する関数
-
[解決済み】MongoDB コレクションの変更をリッスンする方法は?
-
[解決済み】MongoDBのすべてのドキュメントのフィールド名を変更するにはどうすればよいですか?