私はmongodbに、約100 000のドキュメント(シャーディングされていない)を含むかなり大きなコレクションを持っています。これは、基本的にユーザーがこのコレクション内の同じ情報を表示するためにさまざまな方法を参照できるようにするWebアプリケーションのバックエンドです。
ビューの1つとして、集計フレームワークを使用してフィールドの出現回数をカウントしようとしています。これは、コレクション全体を集約することを意味します。問題は、この集計操作(グループ、並べ替え、制限の単純なパイプライン)に2秒かかることです。これは、Webアプリケーションには遅すぎます。
だから私の質問は; この集計操作の結果をキャッシュするための推奨されるソリューションは何ですか?私が見つけた限りでは、新しいコレクションなどに「集約」することはできません。現時点で私が見つけた唯一の解決策は、結果全体を変数に読み込んでから、insertを使用してこの変数を新しいコレクションに挿入することです-しかし、これにはデータベースからアプリケーションに大量のデータを送信することが含まれるのではないかと心配しています=>データベースに戻りますか?
助言がありますか?
パイプラインの例:
res = items.aggregate([
{ "$group": { "_id": { "item_id": "$item_id", "title": "$title", "category": "$category" }, "count": { "$sum": 1 } } },
{ "$sort": { "count": -1 } },
{ "$limit": 5 }
])
スキーマは基本的にこれらの3つのフィールドと、実際には関係のないいくつかのフィールドです。
doc = {
"item_id": 1000,
"title": "this is the item title",
"category": "this is the item category"
}
item_idと3つのフィールドすべてのインデックスを試しましたが、成功しませんでした。