2012-05-10 4 views
2

JavaドライバでWriteConcernフラグをSAFEに設定すると、MongoDBのパフォーマンスにどのような影響がありますか?SAFEモードでのMongoDBのパフォーマンス

+0

これは私が尋ねるばかげた質問かもしれませんが、パフォーマンスが低下すると思って簡単に想像することができます。どれくらい? *あなたのシステムとあなたの*データで自分で測定してください。 –

+0

Mongoはデフォルトで火をつけて忘れるので、本物の質問です。明らかにそれは減速するだろうが、私は他の人々がこれに対処する方法に基づいて答えを探していた – Rand

答えて

4

期待どおりに大幅に減速します。

"SAFE"フラグがないと、MongoDBドライバは "Fire &忘れる"モードで動作します。したがって、updateコマンドがサーバーに送信され、その後、ドライバーが続行されます。書き込みにエラーがある場合、または変更が行われる前にサーバーが停止した場合、クライアントは何も認識しません。

"SAFE"フラグを使用すると、ドライバはupdateコマンドとgetLastError()コマンドの両方を実行します。この2番目のコマンドは、DB上で実際に更新が行われるまで完了しません。少なくとも、1つではなく2つのコマンドを送信しています(だから、の方が50%遅くなります)。

私の経験では実際には5倍から20倍遅くなっています。もちろん、これは理にかなっています。なぜなら、実際にデータを書き込むことはこの部分全体の遅い部分であるからです。

SAFEフラグがないと、特定の例外が発生しないことに注意してください。たとえば、キーの重複の例外は発生しません。

MongoDBを典型的なデータベース(MySQLと同じように)として使用する予定の場合は、少なくともの "SAFE"モードとレプリカセットを使用する必要があります。それ以外の場合は、単一のボックスで「ジャーナル」モードが必要です。私はあなたがジャーナルモードを使用すると、パフォーマンスが通常のSQLのように見えるようになります。

+2

あなたの答えは100%正しいものではありません。 「実際にデータを書き込むことは、この作品全体の遅い部分なので、もちろん、これは理にかなっています。これは必ずしも当てはまりません。「安全な」モードとは、挿入/更新が* memory *に適用されたことを意味します。物事がディスク上にあることを確認するには、 "fsync"が必要です。 – Derick

+0

@Derick:答えには2つの問題があります。 #1:ジャーナル化されていることを確認することで、データがディスク上にあることを確認することもできます(fsyncを待つよりもはるかに高速です)。 #2:私のポストのどこにでも "ディスク"という言葉は言及していません。あなたと私は、MongoDBがディスクにデータを取得することが二次懸案事項であることを知っています。 –

+0

ところで、この質問に標準的な答えをしたいのであれば、実際にはMongoDBのドキュメントにアクセスできます。だから私が一度も使ったことのない言葉や私が決して作ったことがない文句ではなく、MongoDBの文書に100%回答してみませんか? –

関連する問題