从MongoDB 2.4迁移到2.6后,我们发现写入操作性能显着下降。这可能是由this change introduced in 2.6引起的,这使得写操作同步。
为了获得类似的性能,是否有任何方法可以将MongoDB 2.6配置为关于写操作的2.4?期待this post,提到了一种“遗留”模式,但是它是否是Mongo shell的一个特性或MongoDB本身的一个特征还不完全清楚。
此外,我一直在阅读有关bulk insert operation的内容,但我不确定在这种情况下它是否有用。考虑到我们的应用程序逻辑,我们不能“打包”几个写入。在使用单写操作(即只包含一次写操作的批量操作)时,使用这种操作来提高写入性能会有什么帮助吗?
答案 0 :(得分:0)
你所说的是部分正确的。在Mongo 2.6中,他们介绍了writeconcerns的概念。
借助此功能,您可以决定要进行写入操作的持久性。存在各种级别,在性能和安全性之间进行权衡。
<强> writeconcern =严格强>
这是最高安全级别,它将写在所有副本上,然后才会提交。
writeconcern = safe
这是第二高的安全性,它将写入(replicas / 2)+1个副本以确保在提交前写入是安全的。
writeconcern = normal
这类似于安全级别,但配置文件中存在值,即用户定义的值,通常为1或法定数量
writeconcern = none
这是进行异步写入的最低安全级别。
在writeconcern = normal的帮助下,如果值为1,或者你对写安全性没有问题,那么与默认使用的writeconcern = safe或strict相比,writeconcern = none将提供最佳性能。
正如您所提到的,批量写入适用于大量数据,而不适用于单个数据。击败批量写入的整个想法。您可以尝试的另一种方法是(如果可能),将所有写入写入缓冲区,然后在末尾使用批量插入进行写入。