1

3 つのノード (node2、node4、および node6) を持つ replSet があります。Node2 の方が優先度が高いため、PRIMARY です。

ローカル マシン (すべてのノードとそのローカル ネットワークから遠く離れた場所) からプライマリ ノードに接続します。

mongo --host node2

そして、大きなドキュメントを 1000 回挿入します。

var start = new Date()
for (var i = 0; i < 1000; i++) { 
  db.test.insert(<big_document>) 
}
var end = new Date()
print("inserts took " + (end - start) + " milliseconds")

次に、同じことを行いますが、今回は単一ノードだけでなく、replSet に接続します。

mongo --host node2,node4,node6

今回は 10 のドキュメントだけを挿入します。

単一ノードに接続した場合、1000 個のドキュメントに 17 秒かかりました。replSet全体に接続する場合、10個のドキュメントに35秒かかりました。

なぜこのような違いが?プライマリ ノードに書き込むと、セカンダリ ノードにもデータが伝播されませんか? (明示的にプライマリにのみ接続した場合でも)

モンゴ 2.4.3

アップデート:

帯域幅の多くを使用していたノードで監視がオンになっていることが判明しました。オフにするとすべて問題ありません。

PRIMARYノードへの書き込みがreplSetへの書き込みよりもはるかに高速だった理由はまだわかりません

4

1 に答える 1

1

レプリカセットのデフォルトの書き込み懸念がReplica-Acknowledgedに設定されている可能性があります。これは、レプリカ セットの他のメンバーが確認するまで、各書き込み操作がブロックされることを意味します。これが必要ない場合は、getLastErrorDefaults (実際にはセッター メソッド) を使用して、レプリカ セットのデフォルトの書き込み懸念を下げることができます。

于 2013-05-23T13:36:52.907 に答える