Pracuję nad aplikacją typu sklepu internetowego. Jedną z funkcji, którą często widzę na innych stronach internetowych, jest podział opcji filtrowania, a następnie łączna liczba wyników filtrowania. Często można to zobaczyć na stronach internetowych (np. Newegg) lub używanych witrynach samochodowych. Przykład:Jak skutecznie liczyć sumy dla opcji filtrów
CPU:
* AMD (315)
* Intel (455)
Video card:
* ATI (378)
* Nvidia (402)
Jak mogę skutecznie obliczyć te sumy? Strona, nad którą pracuję, będzie miała wiele różnych produktów (10.000+) z wieloma różnymi opcjami. Co gorsza, produkty ciągle się zmieniają.
Próba wstępnego obliczenia wszystkich różnych sum filtrowania wydaje się nie do przyjęcia. Jeśli mam 5 różnych filtrów po 4 opcje, liczba opcji będzie wynosić 20 * 16 * 12 * 8 * 4 = 122880
. Obliczenie tego zajęłoby dużo czasu.
Inną opcją byłoby zapytanie na żądanie i buforowanie wyników (np. W Redis). Ale jak mogę efektywnie zarządzać pamięcią podręczną, jeśli produkty są dodawane i usuwane? Pamięć podręczna często jest nieaktualna. Obawiam się, że musiałbym mikro-zarządzać unieważnieniem pamięci podręcznej, prowadząc do bardzo złożonej i kruchej implementacji. Alternatywą byłoby unieważnienie szerokiej sekcji pamięci podręcznej. Ale zaraz po unieważnieniu, moja baza danych zostałaby rzucona przez hunderdany zapytań od aktywnych użytkowników, którzy potrzebują ponownie przeliczyć te liczby.
Czy jest to miły i elegancki sposób na poradzenie sobie z tym?
Zakładam, że robią to jak Google, w większości niepoprawne wartości całkowite :-) – NickD