sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの集約は非常に遅いようです

    @Blakes Sevenですでに述べたように、$groupはインデックスを使用できません。 このトピック を参照してください 。

    したがって、クエリはすでに最適です。このユースケースを最適化するための可能な方法は、データを事前に計算してサイドコレクションに保持することです。

    このデータ構造を試すことができます:

    {
      "_id" : ObjectId("560a5139b56a71ea60890201"),
      "ccy" : "USDNOK",
      "date_time_first" : ISODate("2007-01-01T00:00:07.904Z"),
      "date_time_last" : ISODate("2007-09-09T00:00:07.904Z")
    }
    

    これのクエリは500秒以上ではなくミリ秒単位で実行でき、インデックスを利用できます。

    もちろん、メインコレクションからドキュメントを追加、更新、または削除するたびに、サイドコレクションを更新する必要があります。

    データを「最新」にする必要があるかどうかに応じて、この「ライブ更新プロセス」をスキップして、バッチを使用して1日1回だけサイドコレクションを完全に再生成することもできます。また、データが「新鮮」でない場合があることに注意してください。新鮮」。

    あなたが修正できるもう一つの問題:あなたのサーバーは間違いなくより多くのRAMとCPUを必要とします。特にこの種の集計では、ワーキングセットがRAMに収まらない可能性があります。

    また、SSDをうまく活用できると思いますが、強く 本番環境では、単一のインスタンスではなく、3ノードのレプリカセットを使用することをお勧めします。



    1. PyMongo:no_cursor_timeout=Trueの場合にカーソルはどうなりますか

    2. ブログに推奨されるデータベースバックエンド

    3. MongoDBでデータベースを削除する2つの方法

    4. $exists演算子を使用してフィールドの存在を確認するときにMongoDBはインデックスを使用できますか?