是否可以将所有MongoDB写入默认为安全?这样做有什么打击?

时间:2013-01-08 21:29:54

标签: mongodb performance mongomapper database

对于MongoDB 2.2.2,是否可以将所有写入默认为安全,或者您是否必须为每个写入操作单独包含正确的标志?

如果使用安全写入,性能有何影响?

我们在Rails上使用MongoMapper。

2 个答案:

答案 0 :(得分:2)

如果您使用的是最新版本的10gen官方驱动程序,则默认实际上 是安全的,不是即发即弃(以前是默认设置)

您可以阅读10gen联合创始人和首席技术官的this blog post,其中解释了一些历史记录,并宣布截至11月底所有MongoDB驱动程序默认使用“安全”模式而不是“即发即忘”。

MongoMapper构建于10gen支持的Ruby Driver之上,他们还更新了代码以与新的默认值保持一致。您可以看到主分支的签到和注释here。由于我不确定他们的发布时间表是什么,我建议您在MongoMapper mailing list上询问。

即使在此更改之前,您也可以在MongoMapper中设置连接级别的“安全”值,这与全局一样好。从0.11开始,您可以在mongo.yml文件中执行此操作。你可以在the release notes中看到。

最重要的是,您不必为每次写入指定安全模式,但如果您愿意, 仍可为每个单独的写操作指定高于或低于默认的持久性,但是切换到所有内容的最新版本,然后默认情况下全局使用“安全写入”。

答案 1 :(得分:0)

我不使用mongomapper所以我只能回答一下。

就数据库而言,取决于。安全写入基本上(基本上是关键字)等待数据库执行通常在您从火灾中获得默认“我完成”响应后执行的操作并忘记。

还有更多的工作取决于您希望写入的 安全性。一个很好的例子是写入单个节点和一个到多个节点。如果您写入该单个节点,您将从数据库获得比您希望(安全地)将命令复制到网络中的其他节点更快的响应。

当然,任何数量的安全写入都会导致您可以发送到服务器的写入量受到性能损失,因为在给出响应之前需要更多工作,这意味着可以在数据库中引发更少的写入。关键在于为您的应用程序,数据的速度和持久性之间的平衡做好准备。

现在许多驱动程序(包括MongoDB PHP 1.3,使用写入问题1:http://php.net/manual/en/mongo.writeconcerns.php)默认情况下开始使用正常的安全写入,并且默认情况下正常的fire和forget查询开始被废除。

通过查看mongomapper文档:http://mongomapper.com/documentation/plugins/safe.html,您似乎仍然需要在任何地方添加标记。