20

重複の可能性:
mongodb で削除されたスペースを自動圧縮しますか?

私の理解では、削除操作では、MongoDB はディスク領域を解放しませんが、必要に応じて再利用します。

  1. あれは正しいですか?
  2. そうでない場合は、修復コマンドを実行しますか?
  3. ライブ mongo インスタンスで修復を実行できますか?
4

3 に答える 3

19
  1. はい、正しいです。
  2. いいえ、mongodb にできるだけ多くのディスク領域を与えることをお勧めします (mongodb がより少ないディスクの断片化よりも多くの領域を割り当てることができる場合、追加の領域の割り当ては高価な操作です)。ただし、必要に応じてdb.repairDatabase()、mongodb シェルから実行してデータベースのサイズを縮小できます。
  3. はい、ライブmongodbインスタンスでrepairDatabaseを実行できます(ピーク時間外に実行することをお勧めします)
于 2011-04-01T21:06:08.113 に答える
7

これは、このMongoDBの質問と多少重複しています...

mongodbで削除されたスペースを自動圧縮しますか?

方法の詳細については、その回答を参照してください...

  • スペースを再利用する
  • サーバーサイド JS を使用して定期的なジョブを実行し、スペースを取り戻します (実行可能なスクリプトを含む ...)
  • いくつかのユースケースで Capped Collections を調べたいと思う方法!

また、この関連ブログ投稿を見ることができます: http://learnmongo.com/posts/compacting-mongodb-data-files/

于 2011-04-01T21:19:34.650 に答える
3

システムをロックする余裕がない場合、または 2 倍のストレージがない場合は、db.repairDatabase() を実行するよりもうまく機能する別のソリューションがあります。

レプリカ セットを使用している必要があります。

私の考えでは、ディスクを飲み込んでいる余分なデータをすべて削除したら、セカンダリ レプリカを停止し、そのデータ ディレクトリを消去してから起動し、マスターと再同期させます。他のセカンダリについても、一度に 1 つずつ繰り返します。

マスターで、rs.stepDown() を実行して MASTER を同期されたセカンダリの 1 つに渡します。次に、これを停止し、ワイプして、再同期させます。

このプロセスには時間がかかりますが、rs.stepDown() を実行すると、ダウン タイムは数秒しかかからないはずです。

于 2012-11-13T21:50:55.717 に答える