6

私はしばらくMongoDBを使用しており、fsyncデータがディスクにフラッシュされるのを待っています。わかりましたので、それがデータの安全のための解決策だと思いました。

SQLの代替よりも時間がかかりますが、うまく機能しました。syncdelayその後、 toを入れることができることが0わかり、速度が戻ってきましたが、多くの同時要求が多い将来はどうなるかを考えました。そのfsyncため、更新と挿入からオプションを削除し、syncdelay構成オプションを削除しました。

データが書き込まれているかどうかをテストするために、更新を行った後すぐに Rockmongo を確認したところ、データが実際にそこにありました。超高速です!

では、実際にfsyncは、書き込みが遅くなり、それがないと書き込みが発生し、とにかく高速になる場合はどうなりますか?

4

3 に答える 3

5

Mongo ドキュメントごと:

の主な用途はfsync、バックアップのためにデータベースをフラッシュしてロックすることです。

また

このfsync操作は、実行中に他のすべての書き込み操作をブロックします。

ブロックが原因のようです。

于 2012-07-17T22:35:14.610 に答える
4

fsync技術的には、すべてのデータを強制的にディスクにフラッシュする管理コマンドです。少なくとも通常は、コードで使用する必要はありません。バックアップなどのためにデータベースをロックするために使用されます。

MongoDB でのデータの安全性は、強制的な書き込みではなく、レプリケーション/シャーディング/ジャーナリングによってもたらされます。そのようなものは、物事の目的を打ち負かします。

Java ドライバーは、この「書き込みと同期」の概念をWriteConcernクラスにラップしますが、これはあまり好きではありませんでした。データのどの部分が多かれ少なかれ重要であるかを判断する必要はありませんが、ツールがその仕事をすることを信頼してください。

また、syncdelayゼロに設定する場合は、ジャーナリングをオフにしてください。これを参照してください。

于 2012-07-17T22:41:17.477 に答える
0

他の回答が言っているように、このfsyncコマンドはフラッシュを強制し、通常、特定の時点のスナップショットのデータ ファイルをロックする直前に使用されます。

保留中のすべてのデータがディスクにフラッシュされるまで待機する「fsync」書き込み関連オプションがあります。getLastError通常はこれを使用しませんが、"j" オプション (ジャーナリングが発生するとすぐに戻る) を使用すると、はるかに高速に戻り、永続的な書き込みが保証されます。選択したドライバーの安全なオプションとして update/insert コマンドを介して渡し、getLastErrorコマンドを自動的に実行させることができます。

于 2012-07-17T23:40:03.287 に答える