对于 MongoDB 2.2.2,是否可以将所有写入默认设置为安全,或者您是否必须为每个写入操作单独包含正确的标志?
如果您使用安全写入,性能会受到什么影响?
我们在 Rails 上使用 MongoMapper。
对于 MongoDB 2.2.2,是否可以将所有写入默认设置为安全,或者您是否必须为每个写入操作单独包含正确的标志?
如果您使用安全写入,性能会受到什么影响?
我们在 Rails 上使用 MongoMapper。
如果您使用的是最新版本的 10gen 官方驱动程序,那么默认值实际上是安全的,而不是一劳永逸(曾经是默认值)。
您可以阅读10gen 联合创始人兼首席技术官的这篇博文,其中解释了一些历史,并宣布截至 11 月下旬所有 MongoDB 驱动程序默认使用“安全”模式,而不是“即发即弃”。
MongoMapper 建立在 10gen 支持的 Ruby 驱动程序之上,他们还更新了代码以与新的默认值保持一致。您可以在此处查看 master 分支的签入和评论。由于我不确定他们的发布时间表是什么,我建议您在MongoMapper 邮件列表中询问。
即使在此更改之前,您也可以在 MongoMapper 的连接级别上设置“安全”值,这与全局一样好。从 0.11 开始,您可以在mongo.yml
文件中执行此操作。您可以在发行说明中查看如何。
底线是您不必为每次写入指定安全模式,但如果您愿意,您仍然可以为每个单独的写入操作指定高于或低于默认持久性,但是当您切换到所有内容的最新版本时,然后默认情况下,您将在全局范围内使用“安全写入”。
我不使用mongomapper所以我只能回答一点。
在数据库方面,取决于。安全写入基本上(基本上是关键字)等待数据库在您从火灾中获得默认的“我完成”响应后执行它通常会执行的操作并忘记。
取决于您希望写入的安全程度,还有更多工作。一个很好的例子是写入单个节点和一对多节点。如果您写入该单个节点,您将从数据库获得更快的响应,而不是您希望将命令(安全地)复制到网络中的其他节点。
当然,任何数量的安全写入都会对您可以发送到服务器的写入量造成性能影响,因为在给出响应之前需要做更多的工作,这意味着能够向数据库抛出的写入更少。关键是在数据的速度和持久性之间取得适合您应用程序的平衡。
现在许多驱动程序(包括 MongoDB PHP 1.3,使用 1 的写入关注点:http: //php.net/manual/en/mongo.writeconcerns.php)开始默认使用正常的安全写入,正常的触发和忘记查询是开始默认废除。
通过查看 mongomapper 文档:http ://mongomapper.com/documentation/plugins/safe.html似乎您仍然必须在任何地方添加标志。