-22

3 つのノードのレプリカ セットがあるとします。ノード 1 はプライマリです。ノード 2 はセカンダリで、ノード 3 は 10 秒の遅延で実行されているセカンダリです。データベースへのすべての書き込みは、w=majority および j=1 で発行されます (これは、getLastError 呼び出しにこれらの値が設定されていることを意味します)。

time=0 にアプリケーションから書き込み操作 (挿入または更新) が開始されます。time=5 秒で、プライマリ ノード 1 が 1 時間ダウンし、別のノードがプライマリに選出されます。

ノード 1 が復旧したときに、データのロールバックは行われますか? 最良の答えを選択する。

  1. いつもはい
  2. 常にいいえ
  3. おそらく、ノード 3 が書き込みを処理したかどうかによって異なります。
  4. おそらく、ノード 2 が書き込みを処理したかどうかによって異なります。

どんな助けでも大歓迎です。

4

3 に答える 3

6

回答を 4 に変更しますが、aw=majority の場合は 2 にする必要があります。wtimeout操作が返され、操作がセットの大部分によって確認されなかったというエッジケースが発生する可能性があります。これらの問題は非常にまれであるか、ほとんど発生しないはずですが、覚えておくべきことがあります。

ノードの大部分 (1 と 2) が書き込みを承認するため、ノード 1 がダウンした場合、ノード 2 はその操作を行い、ノード 1 がノード 2 の状態にロールバックする必要がないため、速度が向上するはずです。代わりに、ノード 1 が追いつきます。

ジャーナルは、ロールバックが存在するかどうかを定義する上でそれほど重要ではありません。

于 2013-04-15T07:05:56.507 に答える
1

これは Mongo DB 試験の質問だと思いますが、答えは簡単にわかります。

おそらく、ノード 2 が書き込みを処理したかどうかによって異なります。

于 2015-07-14T02:57:03.563 に答える