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

您可能将副本集的默认Write Concern设置为Replica-Acknowledged。这意味着每个写操作都将阻塞,直到副本集的其他成员确认它为止。当你不需要这个时,你可以使用getLastErrorDefaults(这实际上是一个 setter 方法)来降低副本集的默认写入问题。

于 2013-05-23T13:36:52.907 回答