![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 600 Pomógł: 2 Dołączył: 1.09.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Ostatnio zastanawiałem się nad budowa takich serwisów jak ceneo lub innych dużych serwisów.. Jak oni wyliczają dla każdego przypadku ilośc produktów dl;a danego parametru? Proszę wejśc np na link: http://www.ceneo.pl/Telewizory_LCD;017P0-2...7331-277334.htm. Na wyszukwiarce zaawansowanej są w nawiasach ilości produktów z danym parametrem. Ilośc ta zmienia się jak zaznaczymy jakiś parametr. Jeżeli by dla każdej opcji wykonac obliczenie ile jest produktów dla takiedo przypadku, to trzeba by wykonac z 50 zapytań na takiej ogromnej bazie przy każdym wyświetleniu serwisu. Jak oni to ogarniają? Ktoś kiedyś spotkał się z takim mechanizmem? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie wcale nie musiałoby być jakieś strasznie skomplikowane. Załóżmy, że informacje o atrybutach / właściwościach produktu są przechowywane w jakimś tam modelu EAV, czyli że mamy tabelę z kolumnami: product_id, attribute_id, attribute_value_id.
Wyszukując produkty na podstawie kryterium: producent (atrybut): Sony (wartość), przekątna (atrybut): 42", 44" (wartości) musimy pobrać jedynie identyfikatory tych produktów, które w tabeli EAV-u spełniają te kryteria. Relacyjne bazy danych są całkiem dobrze przygotowane do obsługi tego typu zapytań. Następnie mając już identyfikatory wszystkich znalezionych produktów, pobieramy je wraz z ich wszystkimi atrybutami (czy tam jedynie pewnymi atrybutami - ogólnymi (cena, producent) i powiązanymi z kategorią (przekątna ekranu, kontrast)). Teraz możemy łatwo zliczyć jaki atrybut, z jaką wartością wystąpił ile razy. Pobrane dane można bardzo łatwo zapisać w cache'u na poczet przyszłych wyszukiwań czy kolejnych stron wyników. Jakoś bardzo obciążające to być wcale nie musi. Ten post edytował Crozin 7.12.2011, 11:48:24 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 13:52 |