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