2013-10-31 12 views
7

私が取り組んでいる文書は非常に大きいです。非常に長い調査(調査サルのような)からのユーザー入力を収集し、回答をmongodbデータベースに保管します。MongoDBの最大bsonサイズは回避できますか?

私は私の文書内のフィールドを変更できない場合、私は当然、次のエラー

Error: Document exceeds maximal allowed bson size of 16777216 bytes 

を取得していますが、私が何かできることはありますか?ホワイトスペースなどを削除して、ドキュメントを圧縮する方法はありますか?ここで

編集

は、文書

Schema({ 
    id : { type: Number, required: true }, 
    created: { type: Date, default: Date.now }, 
    last_modified: { type: Date, default: Date.now }, 
    data : { type: Schema.Types.Mixed, required: true } 
}); 

の構造は、データフィールドの例です。

{ 
    id: 65, 
    question: { 
     test: "some questions", 
     answers: [2,5,6] 
    } 
    // there could be thousands of these question objects 
} 
+1

ドキュメントを表示する例を投稿できますか?構造を示すサブセットだけで、これは診断に役立ちます。 –

+0

文脈がなければ、本当に言うことは本当に難しいです。すべてのフィールドを検索する機能が必要ですか? 1つのドキュメントのアトミック更新は必須ですか? – zero323

+0

@TomSwifty私はいくつかの詳細を追加しました。私はすべての情報を格納するデータフィールドを検索する必要はありません。 – bejm

答えて

6

ことの一つは、あなた自身のMongoDB :-)を構築にあります。モンゴブは開平sourceであり、文書のサイズに関する制限は、better schema designを強制するためにむしろ任意である。 this lineを変更して自分で作成することができます。これに注意してください。

もっとも単純な考え方は、それぞれの小さな質問にそれぞれの小さな質問がで、その親を参照するフィールドがあることです。

もう1つのアイデアは、にあるの文書の数です。あなたが制限言うことができます、親がこのようになりますN個の要素である:この方法で番号を変更するNあなたはBSONの16メガバイトになることを確認することができ

{ 
    _id : ObjectId(), 
    id : { type: Number, required: true }, 
    created: { type: Date, default: Date.now }, // you can store it only for the first element 
    last_modified: { type: Date, default: Date.now }, // the same here 
    data : [{ 
    id: 65, 
    question: { 
     test: "some questions", 
     answers: [2,5,6] 
    } 
    }, ... up to N of such things {} 
    ] 
} 

。また、調査全体を読むには、

db.coll.find({id: the Id you need})を選択し、アプリケーションレベルでアンケート全体を組み合わせることができます。また、idのインデックスを必ず確認してください。

さまざまなことを試して、データのベンチマークを行い、効果的なものを見てください。

+1

私はあなたが言及したものと一緒に行かなければならないと思う - 「別の文書のそれぞれの小さな質問」 – bejm

+0

「大きな力をもって大きな責任を負う」しかし、 – EmptyArsenal

+0

データフィールドが実際にはBLOB形式よりも大きいので、実際にはサイズの問題を解決できません。解決方法は質問コレクションの質問を除外することです – Sammaye

0

あなたはgridfsを使用する必要があります。ドキュメントをまとめることができます。ここにリンクです:あなたが行うことができますhttp://docs.mongodb.org/manual/reference/gridfs/

+3

Gridfsは、それらの文書を検索すると、インデックスには不可能であろう、ここでは良いアイデアではないでしょう – Sammaye

+0

@ bejmのコメントごとに、彼らは任意の検索を行いません。 – EmptyArsenal

+0

これは、ニーズが何であるか、彼が期待しているパフォーマンスの種類によって異なりますが、スピードの課題については良い点があります。 – EmptyArsenal

関連する問題