MongoDB 2.2.2 の場合、すべての書き込みをセーフにデフォルト設定することは可能ですか?それとも、書き込み操作ごとに個別に適切なフラグを含める必要がありますか?
安全な書き込みを使用すると、パフォーマンスにどのような影響がありますか?
Rails では MongoMapper を使用しています。
MongoDB 2.2.2 の場合、すべての書き込みをセーフにデフォルト設定することは可能ですか?それとも、書き込み操作ごとに個別に適切なフラグを含める必要がありますか?
安全な書き込みを使用すると、パフォーマンスにどのような影響がありますか?
Rails では MongoMapper を使用しています。
最新バージョンの 10gen 公式ドライバーを使用している場合、デフォルトは実際には安全であり、ファイア アンド フォーゲット (以前はデフォルトでした) ではありません。
10gen の共同創設者兼 CTO によるこのブログ投稿を読むことができます。この記事では、いくつかの歴史を説明し、11 月下旬の時点ですべての MongoDB ドライバーがデフォルトで「ファイア アンド フォーゲット」ではなく「セーフ」モードを使用していることを発表しています。
MongoMapper は、10 世代対応の Ruby ドライバーの上に構築されており、新しいデフォルトと一致するようにコードを更新しました。master ブランチのチェックインとコメントはこちらで確認できます。リリース スケジュールが不明なため、MongoMapper メーリング リストで質問することをお勧めします。
この変更の前でも、MongoMapper の接続レベルで「安全な」値を設定できましたが、これはグローバルと同じくらい優れています。0.11 から、mongo.yml
ファイルで実行できます。リリース ノートでその方法を確認できます。
肝心なのは、書き込みごとにセーフモードを指定する必要はありませんが、必要に応じて、個々の書き込み操作ごとにデフォルトよりも高いまたは低い耐久性を指定できますが、すべての最新バージョンに切り替えると、デフォルトで「安全な書き込み」をグローバルに使用します。
私はmongomapperを使用していないので、少ししか答えられません。
データベースに関しては、依存します。安全な書き込みとは、基本的に (基本的にはキーワードです)、火災からデフォルトの「完了しました」という応答を受け取って忘れた後、データベースが通常行う処理を待機することです。
書き込みをどれだけ安全にしたいかによって、さらに多くの作業があります。良い例は、単一ノードへの書き込みと 1 対多ノードへの書き込みです。その単一のノードに書き込むと、ネットワーク内の他のノードにコマンドを (安全に) 複製する場合よりも、データベースからの応答が速くなります。
もちろん、安全な書き込みの量に関係なく、サーバーに送信できる書き込みの量にパフォーマンス ヒットが発生します。これは、応答が返される前により多くの作業が必要になり、データベースでスローできる書き込みが少なくなるためです。重要なことは、データの速度と耐久性のバランスをアプリケーションに合わせて調整することです。
現在、多くのドライバー (MongoDB PHP 1.3 を含む、1 の書き込み懸念を使用: http://php.net/manual/en/mongo.writeconcerns.php ) は、デフォルトで通常の安全な書き込みを使用し始めており、通常のファイア アンド フォーゲット クエリはデフォルトで廃止され始めています。
mongomapper のドキュメント: http://mongomapper.com/documentation/plugins/safe.htmlを見ると、どこにでもフラグを追加する必要があるようです。