そのため、MongoDBの集約フレームワークを使用しており、現在約70万のドキュメントが含まれているコレクションに対してクエリを実行しています。クエリは次のとおりです。
db.logs.aggregate(
{'$match' : { 'tag' : 'TAG-XYZ' }},
{'$project' : {
'tag' : '$common_tag.bId'
}},
{'$unwind' : '$tag'},
{'$group' : {
'_id' : '$tag',
'total' : {'$sum' : 1}
}},
{'$sort':{'_id':1}},
{'$skip':0},
{'$limit':20}
)
logs
約20のフィールドが含まれています。tag
は平均10個のタグの配列であり、common_tag
いくつかの分類されたタグをタグ配列から分離して、のイニシャルの使用を排除する単なる埋め込みドキュメント$unwind
ですtag
。私はページ付けを使用しているので、の値skip
は可変です。クエリが使用されるため、固定結果のセットがないことに注意してください。
問題は、クエリの実行に少なくとも30秒かかることです。私の心配は、データセットが増え続けており、リアルタイム(またはほぼリアルタイム)のクエリ要件をサポートしていない可能性があることです。クエリを改善するためのより良い方法はありますか?