
Stworzenie wydajnej platformy e-commerce, która pozwoli użytkownikom na szybkie i wygodne znalezienie wybranego produktu z bazy liczącej ponad 700 tyś. pozycji. System sklepu musiał ściśle współpracować z dostawcą danych i magazynem obsługującym wysyłki zamówień. Dodatkowym utrudnieniem była częsta rotacja danych.
W trakcie realizacji okazało się, że poza platformą e-commerce potrzebny będzie również dedykowany system klasy CRM. Pozwoli on na sprawną pracę Biura Obsługi Klienta i śledzenie procesu realizacji zamówień, oraz generowanie statystyk sprzedaży.
Zapewniliśmy odpowiednią szybkość przeszukiwania bazy produktów, korzystając z dedykowanego silnika wyszukiwania (Search Engine). Istnieje kilka tego typu rozwiązań, zarówno Open Source jak i płatnych. Mieliśmy już wcześniej doświadczenia z aplikacją Mnogo search engine, ale zdecydowaliśmy się spróbować czegoś o bardziej rozbudowanej funkcjonalności. Wybraliśmy system Sphinx.
Sphinx Search Engine jest bardzo rozbudowanym narzędziem Open Source, o bardzo wysokiej wydajności zarówno wyszukiwania jak i indeksowania danych. Źródłem danych dla Sphinx’a może być baza danych (wbudowane wsparcie dla MySQL i PostreSQL) lub dokumenty XML.
Dzięki odpowiedniemu skonfigurowaniu Sphinx’a i wprowadzonym modyfikacjom, powstała wyszukiwarka o następujących cechach:
Na początku w zakresie projektu przewidywana była integracja z zewnętrznym systemem. W trakcie prac zdecydowano się jednak opracować dedykowaną aplikację, która będzie gromadziła dane odnośnie zamówień ze wszystkich współpracujących ze sobą systemów:
Sklep współpracuje z magazynem Firmy Księgarskiej Jacek Olesiejuk. Na potrzeby sklepu zostały opracowane formaty i harmonogramy wymiany danych w oparciu o pliki XML.
Wyzwaniem była duża zmienność i rotacja danych. Wymagało to opracowania bardzo wydajnych mechanizmów, które nie mogły powodować przerw w działaniu sklepu.
Wymieniane dane:
Jest to specjalna funkcja systemu, która pozwala na dobór produktu odpowiedniego dla osób w określonym wieku i płci. Bardzo pomocna, gdy nie mamy np. pomysłu na prezent. Funkcjonalność składa się z dwóch modułów. Jeden przeznaczony jest dla użytkowników, aby mogli znaleźć odpowiedni produkt. Drugi moduł przeznaczony jest dla redaktorów, w celu łatwej kategoryzacji produktu dla odpowiedniej grupy docelowej.
W przypadku sklepu o tak szerokiej ofercie kluczową funkcjonalnością pozwalającą na sprawne poruszanie się po stronie jest intuicyjna i szybko działająca wyszukiwarka. Pierwsza wersja po uruchomieniu sklepu oparta była o wbudowaną w bazę danych MySQL funkcję: Full text Search. Szybko jednak okazało się, że nawet przy istniejących w TYPO3 mechanizmach cache'owania wyników działanie wyszukiwarki przy większym ruchu jest zbyt powolne, a przede wszystkim generuje bardzo duże obciążenie na bazie danych. Poza tym wyszukiwarka nie oferowała bardzo pożądanych funkcjonalności wpływających na intuicyjność takich jak:
Szybko zaczęliśmy poszukiwać innego rozwiązania. Wybór był oczywisty, dedykowany silnik wyszukiwania. Istnieje jednak wiele takich rozwiązań. Wcześniej wykorzystywaliśmy już przy innych projektach Mnogo Search (http://www.mnogosearch.org/). W tym przypadku zdecydowaliśmy jednak, że silnik ten nie oferuje nam odpowiedniej funkcjonalności. Brakowało mu przede wszystkim wbudowanej możliwość zaawansowanego filtrowania wyników i sortowania.
Dokonując porównania innych rozwiązań zdecydowaliśmy się na bardzo chwalone przez deweloperów rozwiązanie Sphinx Search Engine. Dlaczego postawiliśmy na ten silnik? Zdecydowały o tym następujące funkcjonalności:
Mechanizm działania silników wyszukiwania (ang.Search Engines) jest dość prosty. W tle, zwykle co określony czas pobierane są dane ze źródła (baza danych, plików XML), które podlegają indeksowania. W momencie którym chcemy odszukać interesujące nas dane, zamiast tworzyć zapytanie do bazy danych, to tworzymy jego ekwiwalent do silnika wyszukiwania. Silnik w zależności od wybranego rozwiązania może nam zwrócić rekordy wraz z ich atrybutami (dla książki np.: tytuł, autor, cena), lub tylko same identyfikatory. W drugim przypadku resztę pożądanych atrybutów pobieramy sami ze źródła, czyli rola silnika ogranicza się tylko do wskazania nam właściwych, interesujących nas rekordów. Silnik musi działać jako usługa stale włączona na serwerze podobnie jak baza danych.
Po pierwsze Sphinx spełnił wszystkie nasze wymagania i potrzeby, przy czym zaoferował rewelacyjną wydajność. Dla naszej bazy składającej się z około 1 mln pozycji, przy stosowaniu wielu filtrów i sortowaniu wyników po stronie Sphinx'a prędkość zwrócenia wyników nigdy nie przekroczyła 20 ms.
Zastosowanie Sphinxa pozwoliło na znaczące odciążenie bazy danych, przez co poprawiła się nie tylko szybkość działania wyszukiwarki, ale i całej strony.
Kolejną zaletą była zaskakująca szybkość i łatwość wdrożenia w pełni funkcjonalnego rozwiązania. Cała konfiguracja i podpięcie silnika do naszego działającego już systemu zajęły 2 dni pracy jednemu programiście, który wcześniej nie miał w ogóle styczności z tym rozwiązaniem.
klient
data realizacji: 20.06.2011