私たちのバージョンのほとんどはMongodbにあります。次のように選択したバージョン管理メカニズムは次のとおりです。MongoDB集約クエリが非常に遅いです
{ "docId" : 174, "v" : 1, "attr1": 165 } /*version 1 */
{ "docId" : 174, "v" : 2, "attr1": 165, "attr2": "A-1" }
{ "docId" : 174, "v" : 3, "attr1": 184, "attr2" : "A-1" }
だから、私たちは私たちのクエリを実行するとき、我々は常に我々のオブジェクトの取得最新バージョンを確保するために、このように集約フレームワークを使用する必要があります。
db.docs.aggregate([
{"$sort":{"docId":-1,"v":-1}},
{"$group":{"_id":"$docId","doc":{"$first":"$$ROOT"}}}
{"$match":{<query>}}
]);
このアプローチの問題は、グループ化を済ませた後に、コレクション内のデータとは何も関係がないため、インデックスを使用できないということです。
結果として、コレクションのドキュメントが多いほどクエリが遅くなります。
これをスピードアップする方法はありますか?
ない場合、私はこの良い記事で定義されたアプローチの一つに移動することを検討するには:1つのコレクションの最新バージョンを保持し、1:http://www.askasya.com/post/trackversions/
なぜ最初の段階で$一致していないのですか? –
ドキュメントのdocIdフィールドにインデックスを追加します。 –
@DanieleTassone私はそれがオプションではないかと恐れています。説明は私が提供したリンクにあります。基本的には、最初にフィルタをかけると、最新ではないバージョンになりますが、ソートグループのフェーズではそのように見なされます。このようなバージョニングを実行する際によくあるエラーです。 – jbernal