ログデータのコレクションがあります。コレクションの各ドキュメントは、MACアドレスと暦日で識別されます。基本的には:MongoDBでは、日々のログ文書への書き込みパフォーマンスを最大化するための戦略
{
_id: <generated>,
mac: <string>,
day: <date>,
data: [ "value1", "value2" ]
}
5分ごとに、私たちは、当日のドキュメント内のデータ配列に新しいログエントリを追加します。ドキュメントは、MACごとに新しいドキュメントを作成するUTCの真夜中にロールオーバーします。
書込みバイト単位で測定されたIOが1日中増加し、UTCの午前0時に戻ってきたことに気付きました。ログメッセージのレートが一定であるため、これは発生しません。予期せぬ挙動は、Mongoの移動文書によるものであり、ログ配列の更新とは対照的です。価値があるものについては、stats()
は、paddingFactorが1.0299999997858227であることを示しています。
いくつかの質問:
- モンゴの場所に更新したり、移動しているかどうかを確認する方法はありますか?私たちは、低速のクエリログでいくつかの動きを見ていますが、これは事例証拠のようです。私は
db.setProfilingLevel(2)
、次にdb.system.profile.find()
、そして最後に"moved:true"
を探すことができると知っていますが、忙しいプロダクションシステムでこれを行うことが大丈夫かどうかはわかりません。 - 各文書のサイズは非常に予測可能で規則的です。モンゴが多くの動きをしていると仮定すると、モンゴがなぜより正確にプリフォーマットすることができないのかを理解する最良の方法は何ですか?あるいは、モンゴがより正確にプレサイズされるようにするには?上記の問題の説明が正しいと仮定すると、パディングファクタを調整することは、そのトリックを行うようには見えません。
- 私は文書を整理し、Mongoからの推測を取り除くのに十分なはずです。 (私はpadding factor文書は、私はこれを行う必要はありませんが、私はこの問題を私の後ろに置く必要があると言うことを知っています。)文書をpresizeするための最良の方法は何ですか?ガベージバイト配列フィールドを持つ文書を書いてすぐに文書からそのフィールドを削除するのは簡単ですが、私が知っておかなければならない問題はありますか?たとえば、ガベージフィールドを削除する前に、書き込み操作(つまり、安全な書き込みを行う)のためにサーバー上で待機する必要があると考えられます。
- 私は、この時点でディスクが飽和しているように見えるので、1日のドキュメントをすべて同時に前もって割り当てることを心配していました。これは有効な懸念事項ですか?事前配分費を前日よりも引き上げるべきですか?
Scott HernandezさんがGoogleグループでこの質問に回答しましたので、私は彼の答えに投稿しています:http://groups.google.com/group/mongodb-user/browse_thread/thread/8a24e7f3faf95f71# – jtoberon
最新のアップデート:私たちはまだ何が起こっているのか把握しようとしています。 – jtoberon