2015-12-24 4 views
6

My MeteorアプリケーションはCSVファイルを受け取り、Baby Parse(サーバー用のPapa Parse)で解析し、データをMongoDBコレクションに挿入します。MongoDBコレクションで24 MBのCSVデータが230 MBになるのはなぜですか?

各CSV行がドキュメントとして挿入されます。 24 MBのCSVファイルには〜900,000行が含まれています。したがって、コレクション内の約900,000件の文書。各文書には、文書の一意のIDを含む5つのフィールドがあります。

dataSize()を使用してコレクションサイズを取得すると、番号230172976が返されます。私が間違っていなければ、この数字はバイトです。したがって、230 MBです。

なぜこの巨大な増加が起こっていますか?これをどうすれば解決できますか?

+3

透明な説明のためにサンプル行を入力してください。 –

答えて

6

.dataSize()で返される値には、レコードpaddingが含まれているためです。また、文書に_idフィールドがない場合は追加され、各_idフィールドは12-byteとなります。 noPaddingオプションでnoPaddingフラグやdb.createCollection()方法でcollModコマンドを使用して

:あなたは、私はこの問題を解決するにはどうすればよいRecord Allocation Strategies

を読むことをお勧めします。 しかし、あなたはdocumentationで述べたようにので、それをしないでください。

のみ、このような挿入されているワークロードを持つコレクション用としてそのワークロードに成長する書類の原因となるような更新操作を持っていないコレクション、trueにnoPaddingを設定

を-のみ。

以下のcommentに記載されているように、これはMMAPv1 Storage Engineにのみ適用されます。これはMongoDB 3.0およびすべての以前のバージョンのデフォルトのストレージエンジンです。

のMongoDB 3.2はWiredTiger Storage Engineを使用すると、あなたのconfiguration file--storageEngineオプションを使用してそのオプションを使用するためには、デフォルトのストレージエンジンを変更する必要があります。

+0

このオプションはMMAPv1にのみ適用されることに注意することが重要です。 MongoDB 3.2では、WiredTigerがデフォルトのstorageEngineです。 –

関連する問題