私はウェブショップタイプのアプリケーションに取り組んでいます。他のWebサイトでよく見られる機能の1つは、フィルタリングオプションの内訳であり、その後、そのフィルタリングオプションの結果の合計数になります。これは、コンピューターサイト(Neweggなど)や中古車サイトでよく見られます。例:
CPU:
* AMD (315)
* Intel (455)
Video card:
* ATI (378)
* Nvidia (402)
これらの合計を効率的に計算するにはどうすればよいですか?私が取り組んでいるWebサイトには、さまざまなオプションを備えたさまざまな製品(10.000以上)があります。さらに悪いことに、製品は絶えず変化しています。
さまざまなフィルタリングの組み合わせの合計をすべて事前に計算しようとするのは実行不可能のようです。それぞれ4つのオプションを持つ5つの異なるフィルターがある場合、オプションの可能性の数はになります20 * 16 * 12 * 8 * 4 = 122880
。それを計算するには長い時間がかかります。
もう1つのオプションは、オンデマンドでクエリを実行し、結果をキャッシュすることです(Redisなど)。しかし、製品が追加および削除され続ける場合、どうすればキャッシュを効率的に管理できますか?多くの場合、キャッシュは古くなっています。どういうわけか、キャッシュの無効化を細かく管理する必要があり、非常に複雑で脆弱な実装につながるのではないかと心配しています。別の方法は、キャッシュの幅広いセクションを無効にすることです。しかし、無効にした直後、私のデータベースは、これらの合計を再計算する必要があるアクティブユーザーからの大量のクエリによって急いでいました。
これを処理するための素敵でエレガントな方法はありますか?