15

我发现官方MongoDB C#驱动的一些方法使用SafeMode和返回SafeModeResult。这是什么SafeMode以及如何使用它?很高兴看到一些用例——例如,RemoveAll使用MongoCollection.

4

3 回答 3

29

安全模式仅在写入数据库时​​才相关。

为了速度,如果安全模式关闭并且写入操作失败,驱动程序不会等待关心。净效应是没有异常被抛出,你不知道你有一个错误。

Safemode 设置为 on 将强制驱动程序等待成功确认,如果发生错误将抛出异常。

对您关心的数据(用户帐户、订单等)使用安全模式。

不要将安全模式用于非必要数据(日志记录、使用情况统计等)

MongoDB 的默认行为是关闭安全模式。

于 2011-01-06T00:52:28.280 回答
24

文档

SafeMode 有各种级别,该类用于表示这些级别。安全模式仅适用于尚未返回值的操作(因此它不适用于查询或命令)。它适用于以下 MongoCollection 方法:插入、删除、保存和更新。

安全模式的要点是,在将插入、删除、保存或更新消息发送到服务器之后,它会跟随一个 GetLastError 命令,以便驱动程序可以验证操作是否成功。此外,当使用副本集时,可以验证信息是否已复制到某个最小数量的辅助服务器。

SafeMode 类具有静态属性和方法,可让您轻松访问常用模式或创建自己的模式:

* SafeMode.False
* SafeMode.True
* SafeMode.WaitForReplications(int n)

“n”的值包括主要的,所以通常你希望 n >= 2。

我希望这足以理解 SafeMode 的用途。

于 2011-01-05T14:20:31.240 回答
2

SafeMode似乎已经过时了。

等效的是WriteConcern.Acknowledged on MongoClientSettings(通常传递给MongoClient构造函数)。Acknowledged 是当前驱动程序版本 (2.2.4) 中的默认 WriteConcern。

另请参阅MongoDb SafeMode 与 WriteConcern 的比较

于 2016-06-14T17:07:03.600 回答