2

在 java 驱动程序中将 WriteConcern 标志设置为 SAFE 如何影响 MongoDB 性能?

4

1 回答 1

4

显着减慢速度(如您所料)。

如果没有“SAFE”标志,MongoDB 驱动程序将在“Fire & Forget”模式下运行。所以update命令被发送到服务器,然后驱动程序继续。如果写入发生错误或服务器在更改发生之前死机,则客户端对此一无所知。

使用“SAFE”标志,驱动程序同时执行update命令和getLastError()命令。在数据库上实际发生更新之前,第二个命令不会完成。至少,您发送的是两个命令而不是一个(所以它慢了 50%)。

根据我的经验,它实际上慢了 5 到 20 倍。当然,这是有道理的,因为实际写入数据是整个部分的缓慢部分。

请注意,如果没有 SAFE 标志,某些异常将永远不会发生。例如,您永远不会遇到重复键异常。

如果您打算使用 MongoDB 作为典型的数据库(类似于 MySQL),您 至少需要使用“SAFE”模式和副本集。否则,您需要带有单个框的“JOURNAL”模式。如果您使用 JOURNAL 模式,您会注意到性能开始看起来很像常规 SQL。

于 2012-05-11T00:20:59.700 回答