我有3个节点(node2,node4和node6)的replSet。 Node2具有更高的优先级,因此它是主要的。
我从本地计算机连接到主节点(远离所有节点及其本地网络):
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秒。
为什么会出现这样的差异?当我写入主节点时,它是否也将数据传播到辅助节点? (即使我明确地只连接到主要的那个)
Mongo 2.4.3
更新:
事实证明,在节点上开启了监控功能,这些节点占用了大部分带宽。关闭时一切都很好。
仍然不知道为什么写入PRIMARY节点比写入replSet
要快得多答案 0 :(得分:0)
您可能将副本集的默认Write Concern设置为 Replica-Acknowledged 。这意味着每个写操作都将阻塞,直到副本集的其他成员已确认它为止。如果不需要,可以使用getLastErrorDefaults(实际上是一个setter方法)降低副本集的默认写入问题。