更新: compact
で コマンドおよび WiredTigerは、余分なディスク領域が実際にOSに解放されるようです。
更新: v1.9以降では、compact
があります コマンド。
このコマンドは、「インライン」で圧縮を実行します。それでもいくらかの余分なスペースが必要ですが、それほど多くはありません。
MongoDBは、次の方法でファイルを圧縮します:
- ファイルを新しい場所にコピーする
- ドキュメントをループして並べ替え/解決する
- 元のファイルを新しいファイルに置き換える
この「圧縮」は、mongod --repair
を実行することで実行できます。 または、直接接続してdb.repairDatabase()
を実行します 。
どちらの場合も、ファイルをコピーするためのスペースが必要です。圧縮を実行するのに十分なスペースがない理由はわかりませんが、より多くのスペースを持つ別のコンピューターがある場合は、いくつかのオプションがあります。
- Mongoがインストールされている別のコンピューターにデータベースをエクスポートします(
mongoexport
を使用) )次に、同じデータベースをインポートできます(mongoimport
を使用) )。これにより、より圧縮された新しいデータベースが作成されます。これで、元のmongod
を停止できます 新しいデータベースファイルに置き換えれば、準備は完了です。 - 現在のmongodを停止し、データベースファイルをより大きなコンピューターにコピーして、そのコンピューターで修復を実行します。その後、新しいデータベースファイルを元のコンピューターに戻すことができます。
現在、Mongoを使用して「適切な場所にコンパクト化」するための良い方法はありません。そして、モンゴは間違いなく多くのスペースを吸収することができます。
圧縮のための現時点での最善の戦略は、マスタースレーブセットアップを実行することです。次に、スレーブを圧縮し、追いついて切り替えます。私はまだ少し毛むくじゃらを知っています。たぶん、Mongoチームはより良いインプレース圧縮を思い付くでしょうが、私はそれが彼らのリストの上位にあるとは思いません。ドライブスペースは現在安いと想定されています(そして通常はそうです)。