如何在java驱动程序中将WriteConcern标志设置为SAFE会影响MongoDB的性能?
答案 0 :(得分:4)
显着减慢速度(正如您所料)。
没有“SAFE”标志,MongoDB驱动程序以“Fire& Forget”模式运行。因此update
命令被发送到服务器,然后驱动程序继续。如果写入错误或服务器在更改发生之前死亡,则客户端对此一无所知。
使用“SAFE”标志,驱动程序同时执行update
命令和getLastError()
命令。在更新实际发生在DB上之前,第二个命令将无法完成。至少,你发送的是两个命令而不是一个(所以它慢了50%)。
根据我的经验,它实际上慢了5倍-20倍。当然,这是有道理的,因为实际编写数据是整篇文章的缓慢部分。
请注意,如果没有SAFE标志,则永远不会发生某些异常。例如,您永远不会得到重复的密钥异常。
如果您计划将MongoDB用作典型数据库(类似于MySQL),则需要使用至少“SAFE”模式和副本集。否则,您需要使用单个框“JOURNAL”模式。我使用JOURNAL模式,你会注意到性能开始像常规SQL一样很多。