sql >> データベース >  >> NoSQL >> MongoDB

MongoDBは削除されたスペースを再利用しますか?

    更新(2015年3月): 3.0リリースの時点で、MongoDBで利用可能な複数のストレージエンジンがあります。この回答はMMAPストレージエンジン(MongoDB 3.0のデフォルト)に適用されます。他のエンジン(WiredTigerなど)の回答はまったく異なり、調整可能である可能性があります。したがって、別のエンジンを使用している場合は、そのストレージエンジンに関連するドキュメントを読んで、スペースの再利用のデフォルトとオプションを確認してください。

    MMAPストレージエンジンでは、ドキュメントが削除されると、残されたスペースが空きリストに入れられます。ただし、スペースを使用するには、後で同じサイズのドキュメントを挿入する必要があります。MongoDBは、特定の時間枠内でそのドキュメントに適切なスペースを見つける必要があります(リストを見るとタイムアウトになると、追加されます)。スペースの再利用はあまり頻繁には発生しません。この削除はデータファイル内で行われるため、ここではディスクスペースの再利用は行われません。これらはすべて、既存のデータファイル内で内部的に行われます。

    その後、修復を行うか、セカンダリを最初から再同期すると、データファイルが書き換えられ、ディスク上のスペースが再利用されます(ドキュメントのパディングも削除されます)。これは、実際のスペースの再利用がディスク上に表示される場所です。その他のアクション(コンパクトを含む)の場合、ディスク上の使用量は変化せず、さらに増加する可能性があります。

    2.2以降では、collModコマンドとusePowersOf2Sizesオプションを使用して、削除されたスペースを再利用する可能性を高めることができます(これは2.6以降のデフォルトであることに注意してください)。これは、ドキュメントの初期スペース割り当ての効率が少し低いことを意味します(たとえば、400バイトのドキュメントの場合は512バイト)が、新しいドキュメントが挿入されると、そのスペースを再利用できる可能性が高くなります。ドキュメントを大量に削除(または拡大して移動)する場合、長期的にはこれがより効率的になります。

    興味のある人のために、多くのストレージコードを書いた人の1人(Mathias Stearn)が、ストレージの内部について素晴らしいプレゼンテーションを行っています。これはここにあります




    1. Webmachineとeredisを連携させるにはどうすればよいですか?

    2. mongoDB(mongoose)の仮想フィールドによる並べ替え

    3. ドキュメントの配列内のオブジェクトをどのように更新しますか(ネストされた更新)

    4. MongoDB3.0でのデータ圧縮の有効化