2016-07-16 18 views
0

MongoDBには数十万のドキュメントがあり、それぞれに複数のフィールドがあります(時間とともに増加する1つのアレイ(1つのエントリは整数と日付を含む) 。MongoDBドキュメントストレージの最適化

ドキュメントを毎日更新する速度を最適化するには、ドキュメントに追加するディスク領域を確保して、エントリをアレイに追加するたびにドキュメントを移動する必要はありませんか?

+0

あなたが何を求めているのかは正確にはわかりませんが、これはかなり広く意見を求めています。誰もあなたの正確なハードウェア仕様を知っているわけではありません(ハードウェアを問題に投げてパーフォーマンスを高めることは可能です)。あなたのパフォーマンスを向上させる可能性のあるスキーマアップデートもあります(更新する配列を使用していることがわかっているのは唯一のことです)。 –

+0

@DavidMakogon意見を求めるのは問題ではありません。 MongoDBのMMAPv1ストレージエンジンは、文書のために余分なスペースをあらかじめ割り当てることができ、文書の移行を防ぐことができます。 。 –

答えて

1

このような状況では、スペースをあらかじめ割り当ててもあまり役に立ちません。遅かれ早かれドキュメントがパディングスペースを超えて増加するため、とにかくドキュメントの移行が行われます。しかし、パディングファクタが高いと、ディスク使用量の面でオーバーヘッドが増えます。

データモデルに欠陥があります。潜在的に無限に拡大するフィールドでは、基本文書を参照して、毎日のイベントに2番目のコレクションを使用する必要があります。

{ 
    _id: baseDocId, 
    … 
} 

はその後、あなたの基本文書である、と

{ 
    _id: dailyEventId, 
    base: baseDocId, 
    date: someISODate, 
    … 
} 

つのイベントのためのドキュメントです。既知の塩基

db.events.find({base: baseDocId}) 

のためのすべてのイベントを取得するには、まだ簡単ですが、あなたは新しいイベントを追加するとき、あなたのパディングオーバーヘッドを増やす必要はありません文書の移行で問題がないと、あなたは16メガバイトのドキュメントサイズ制限を乗り越えます、あまりにも。