3

私は MongoDB を初めて使用します。約 3 億のドキュメントがあり、それらに対していくつかのクエリを実行する必要があるという要件があるため、MongoDB を使い始めました。したがって、構造が似ているコレクションを作成しました。

ログコレクション:

{  LogID, LogName, Version, Serial, Year, Month, Day, Feature { FeatureID, Name, Hour, Minute, second, millisecond  }}

C# ドライバーを使用して、3 億のドキュメントをコレクションに挿入しました。したがって、各ドキュメントは BSONDocument タイプです。

今、Year-2012でドキュメントの数をクエリしようとしています。クエリ時間が15 分を超えています。これは、私が挿入した 3 億のドキュメントに対して予想される動作ですか、それとも mongoDB のパフォーマンスが向上すると予想されますか?

コレクションで作成した構造が正しいかどうかも疑問です。誰でもこれで私を案内できますか?

クエリは基本的に、日付または時刻と FeatureID に基づいています。

4

1 に答える 1

4

確かに、これは予期された動作ではありません。

いくつかの変更を行うことをお勧めします: あなたは mongodb を初めて使用するため、ドキュメントにインデックスがないと想定しているため、フル スキャンが実行されます (すべてのドキュメントをチェックします)。頻繁に検索するキーにインデックスを付けることをお勧めします。したがって、次のようにします。

db.logs.ensureIndex({'Year': 1})
db.logs.ensureIndex({'FeatureID': 1})

もう 1 つのこととして、この日付/時刻キーをDate()フィールドに変換してから、時間範囲クエリを実行することをお勧めします。

ただし、最初はインデックスを作成してパフォーマンスを確認してください。mongodb が内部で何をしているのかを理解するために、 explain operator を忘れないでください。

PSさまざまな時間オプションのクエリについてコメントした後、実際にmongo dateに変換することをお勧めします。このようなことを行う方法については、私の以前の回答を参照してください (確かに、必要なものを作成するには変更する必要がありますが、考え方は同じです)。

于 2013-11-07T08:15:22.443 に答える