Java ドライバーで WriteConcern フラグを SAFE に設定すると、MongoDB のパフォーマンスにどのような影響がありますか?
1 に答える
(予想どおり)大幅に遅くなります。
「SAFE」フラグがない場合、MongoDB ドライバーは「Fire & Forget」モードで動作します。したがって、update
コマンドはサーバーに送信され、ドライバーは続行します。書き込みでエラーが発生したり、変更が発生する前にサーバーが停止した場合、クライアントはそれについて何も知りません。
「SAFE」フラグを使用すると、ドライバーはupdate
コマンドとコマンドの両方を実行しgetLastError()
ます。DB で実際に更新が行われるまで、2 番目のコマンドは完了しません。少なくとも、1 つではなく 2 つのコマンドを送信しています (したがって、50% 遅くなります)。
私の経験では、実際には 5 倍から 20 倍遅くなります。もちろん、これは理にかなっています。なぜなら、実際にデータを書き込むことは、この全体の中で遅い部分だからです。
SAFE フラグがないと、特定の例外が発生しないことに注意してください。たとえば、重複キーの例外が発生することはありません。
MongoDB を一般的なデータベース (MySQL と同様) として使用する場合は 、少なくとも「SAFE」モードとレプリカ セットを使用する必要があります。それ以外の場合は、単一のボックスで「JOURNAL」モードが必要です。JOURNAL モードを使用すると、パフォーマンスが通常の SQL のように見えるようになることに気付くでしょう。