2016-07-04 2 views
3

私はmongoと一緒に働いています。私が保存している文書の1つが最大16MBを超えています。構造を細かくすることがその面で助けになるのではないかと思います。だから私はタイトルに質問があります。 bson表現がすでにドキュメントを縮小している場合、私の側の別のattempは何にも役立たないでしょう。は縮小されたBSON表現ですか?

+0

BSON文書が非常にコンパクトであり、私はあなたが再せず、さらにそれを圧縮しますかわからないことを覚えておく必要がありませんように、あなたのコードは、これらのデータの唯一の読者になる場合には許容することができMongoDBのための独自のデータストアを書きます。あなたの文書が最大限を超えているなら、私は文書構造を再訪することを提案するでしょう。 – Saleem

+1

おそらくデータモデルを再訪するべきです。 16Mbは大変です。そのすべての文書に何を保存していますか?プラス私はそれが役立つとは思わないが、あなたが使用しているストアエンジンは何ですか?より新しいmongoバージョンのデフォルトストレージエンジンとしてtigerを配線し、圧縮を実行する必要があります。 https://docs.mongodb.com/manual/core/wiredtiger/#compression –

+0

@IshanSoni yea私は同意しました。私の質問は、同じ構造を表す縮小された文書スペース使用量の観点から、非縮小文書と同等でした。 – mjsr

答えて

1

のMongoDBのデータを格納します。オブジェクトの合計サイズは、フィールドの長さとフィールドの内容によって異なります。フィールド名を省略したい場合は、ドキュメントを小さくすることができます。

あなたはすぐにロングとショートのフィールド名で文書を挿入することによって、これを確認することができます:あなたは、フィールド名を短縮することができた場合は、オブジェクトのサイズはいくつかの削減を達成することができます

> db.test.insert({abcde:1}) 
> db.test.stats() 
{ 
    "ns": "test.test", 
    "count": 1, 
    "size": 37, 
    "avgObjSize": 37, 
    ... 

> db.test2.insert({a:1}) 
> db.test2.stats() 
{ 
    "ns": "test.test2", 
    "count": 1, 
    "size": 33, 
    "avgObjSize": 33, 
    ... 

上記の2つの例から、フィールド名をabcdeからaに短くすると、オブジェクトサイズが37バイトと33バイトに短縮されました。これは、短いフィールド名を使用して4バイトを節約します。

+0

優れた、同じテストをしていますが、フィールドで私はまたサイズの増加を見る!...多分オブジェクトを縮小することは結局悪い考えではありません! (私はmongoを使い慣れていないし、statsメソッドについて知りませんでした。有用な情報がたくさんあります:))。 – mjsr

0

BSONはすでに非常にコンパクトなフォーマットです。さらに、WiredTigerエンジンはドキュメントレベルではなくページレベルでデータを圧縮します。

文書サイズに16MBの制限がある場合は、文書を分割するか、データベースを再設計する必要があります。

1

文書サイズを小さくしても文書サイズが16MBを超える場合は、GridFSを使用してその文書セットを分割することができます。 MongoDBのドキュメント、

GridFS 1として

は16メガバイトのBSON文書のサイズ制限を超えるファイルを格納し、検索するための仕様です。このことができます

希望...それはフィールド名と内容を保存しBSON表現、中

1

ドキュメントキーはそのまま保存されているので、BSONでは多くのスペースを消費します。そのため、ドキュメントキーをエンコードすると、大量のバイトを節約できます。何人が

const MY_INSANELY_LONG_OBJECT_PROPERTY_NAME = "a"; 

var thePropertyValue = myObject[MY_INSANELY_LONG_OBJECT_PROPERTY_NAME]; 
関連する問題