1

私たちは mongoDB を単一の非シャーディング インスタンスで実行しており、データベースは 1 つだけです。データ ファイルのサイズは 0.45 GB でした。すべてのコレクションの storageSize を調べたところ、合計サイズは ~85 MB でした。未使用の領域を再利用するために、repairDatabase() を実行しましたが、ファイル サイズが 64 から 128、256、そして 2 GB まで増加することを理解しました。私たちが持っている mongo オブジェクト データ (85 MB) は 64 + 128 MB のファイルに収容できるため、256 MB のファイルが再利用されると予想していました。しかし、驚いたことに、スペースは再利用されませんでした。

どのくらいのスペースが再利用されるかを見つけることができるロジックを教えてもらえますか? 基本的に、データベースが使用する合計ディスク容量と mongo オブジェクトの合計データ サイズが与えられた場合、どのくらいのスペースが再利用されるかを正確に見積もることができますか?

以下は、コメントで要求された db.stats() の出力です。

> db.stats()
{
        "db" : "analytics_data_1",
        "collections" : 12,
        "objects" : 207223,
        "avgObjSize" : 353.6659347659285,
        "dataSize" : 73287716,
        "storageSize" : 84250624,
        "numExtents" : 43,
        "indexes" : 26,
        "indexSize" : 21560112,
        "fileSize" : 469762048,
        "nsSizeMB" : 16,
        "dataFileVersion" : {
                "major" : 4,
                "minor" : 5
        },
        "ok" : 1
}
>
4

1 に答える 1

2

ストレージ FAQ では、余分なファイルは常に事前に割り当てられ、書き込みを開始するとすぐにmongod次のファイルが事前に割り当てられると説明されています。

修復は、通常存在するスペースを再利用しません。多くのデータを削除したか、いくつかのコレクションを削除した場合にのみ役立ちます。

事前割り当てを無効にすると、スペースを節約できますが、実際に書き込む必要があるときにファイルが割り当てられるため、パフォーマンスが低下し、挿入が遅くなります。

于 2013-11-13T09:44:12.097 に答える