我的问题听起来太笼统了,但我已经准备好给出任何缺失的数据。MongoDB writeConcern for production
我们做出类似社交网络的东西。为了使读取性能更好,以缓解主实例的生命,我们已经在我们的replicaSet设置
readPreference=secondaryPreferred
。但有了这个,也不能保证你从那里读取之前将数据写入到辅助的情况下,所以我们必须设置
w=3
选项。 到目前为止,似乎一切正常,但我本地副本集上的度量显示以下插入统计信息。
Inserting 300 objects:
w=1 - 0.10s
w=3 - 1.31s
Insertion 5000 objects:
w=1 - 0.6s
w=3 - 14.6s
问题是,这是预期的差异,还是我做错了什么?
感谢您的回复。实际上,在做这件事之前我们已经分解了数据库,没有任何误解,我们启用了w = N,原因有两个: 1.降低对主实例的读取请求数。 2.具有强大的,而不是最终的一致性。 根据你的回答,接管部分是,考虑从主节点读取操作是否需要很强的一致性。 :-) 谢谢。 – inteloid
关于(2)的注意事项:请记住,由于异步复制,w = N不会改变次级服务最终一致的事实。如果您打算读取刚刚用w = N写入的相同数据,则只能获得一致的读取次数。如果这是您访问模式,请考虑findAndModify代替写入和读取序列。这将确保这个操作序列是原子的,并且将比两个单独的操作执行得更快。 –
你的意思是,如果线程A插入一条记录并等待来自辅助节点的确认,另一个线程在从主节点读取时与从辅助节点读取时可能会得到不同的结果? 这对我们来说有些不错,我认为我们暂时可以接受它。 关于findAndModify,在webapp中使用它并不容易,因为它改变了代码的逻辑。 – inteloid