W miarę rozwoju systemu informatycznego architekci oprogramowania i programiści muszą mierzyć się z coraz to nowymi wyzwaniami, które rzadko zostają uchwycone na początku realizacji projektu. Najczęściej są to problemy wydajnościowe, związane ze wzrostem wolumenu danych.
Z jednej strony to rzecz nieunikniona i pożądana przez właściciela systemu, z drugiej duży wolumen danych stanowi punkt wyjścia do przeprowadzenia niezbędnego procesu optymalizacji procesów wyszukiwania danych. Jeśli rozwijamy platformę business-to-business to prędzej czy później jej właściciel zgłosi potrzebę zaimplementowania wyszukiwarki produktów i usług dostępnych na platformie.
Dostarczenie wydajnej, dobrze skalowalnej i działającej w trybie near real-time data wyszukiwarki jest zadaniem niebanalnym, dlatego nawet najmniejsze zbagatelizowanie tematu może doprowadzić cały projekt do klęski. Na rynku istnieje wiele gotowych rozwiązań godnych polecenia. Poniżej przeczytacie o jednym z nich.
Czym jest?
- Biblioteką Javy umożliwiająca implementację wyszukiwania pełnotekstowego, ale nie tylko. Solr umożliwia wyszukiwanie za pomocą słów kluczowych, dostarcza mechanizm podpowiadania, wspiera wyszukiwanie za pomocą synonimów czy wyszukiwanie geoprzestrzenne.
- Dostępny jest na licencji Open Source (http://svn.apache.org/viewvc/lucene/dev/).
- Duża społeczność, wyrażona nie tylko w ilości aktywnych deweloperów, ale również w ilości grup dyskusyjnych i słuchaczy.
http://solr.meetup.com/
Najbliższa grupa działa w Warszawie: http://www.meetup.com/es-warsaw/. - Wewnetrznie używa dobrze znanej biblioteki Apache Lucene. O porównaniu i rozgraniczeniu pomiędzy obydwoma bibliotekami przeczytasz na
- Obie technologie są rozwijane i utrzymywane przez Apache Foundation.
- Solr uruchamiany jest jako web-aplikacja Javy, która może zostać uruchomiona na dowolnym serwerze zgodnym ze specyfikacja serwletów, takich jak Tomcat lub Jetty i innych, w pełni implementujących specyfikację JEE. Z jego usługami integrujemy się za pomocą REST-like API.
Co wyróżnia Apache Solr?
- szybkość – Solr potrafi wykonać nawet skomplikowane zapytania użytkownika w ciągu kilkudziesięciu milisekund,
- wolumen danych – Solr został zaprojektowany by pracować z indeksami opartymi na dziesiątkach milionów dokumentów,
- skalowalność – Solr skaluje proces indeksowania danych oraz przetwarzania zapytań użytkownika na wszystkie serwery dostępne w klastrze,
- instalacja – Solr jest łatwy do instalacji i konfiguracji, dostarczając wiele gotowych przykładów konfiguracji,
- sortowanie – Solr zwraca dokumenty posortowane wedle ich trafności i zgodności do zapytania użytkownika,
- język naturalny – Solr wspiera wyszukiwanie tekstowe w języku naturalnym, czyli w treści e-maili, stron WWW, dokumentów PDF i tym podobnych.
Podsumowanie.
Należy pamiętać, że wyszukiwarki zostały zaprojektowane by wspierać operacje odczytu danych, natomiast w innych typach operacji na danych są powolne i niewydajne. Kiedy powinno się rozważyć użycie Apache Solr? Został on zoptymalizowany do wspierania wyszukiwania w wolumenie danych jeśli:
- zawiera tekst w formie, którą użytkownicy chcą wyszukać, czyli ustrukturyzowany za pomocą języka naturalnego,
- tekst będzie dużo częściej odczytywany niż zmieniany,
- oparty jest na płaskich dokumentach, to znaczy takich, które nie zawierają referencji do innych dokumentów. Jeśli źródło danych jest w bazie danych, to dane powinny być najpierw zdenormalizowane w taki sposób, by dokumenty zawierały wartości pól do wyszukiwania i prezentacji użytkownikowi,
- dokumenty są heterogeniczne, to znaczy że nie muszą być identycznego typu, jak ma to miejsce w przypadku krotek w bazie danych,
- wolumen danych jest na tyle duży, że nie pozwala na wydajne użycie wbudowanych w bazę danych mechanizmów wyszukiwania, jeśli to tam są przechowywane dane.
Do czego nie używać Apache Solr?
- do zwracania dużej ilości wyników jednocześnie. Mechanizmy wyszukiwarki zostały zaprojektowany w ten sposób, by zwracać jednocześnie wąski zakres wyników, pomiędzy 10 – 100. Aby otrzymać więcej wyników, należy użyć wbudowanego mechanizmu stronicowania. W zapytaniu, które zwraca milion dokumentów, próba otrzymania wszystkich naraz skończy się dużym zużyciem pamięci i równie długim czasem oczekiwania. Samo zapytanie wykona się bardzo szybko, natomiast wewnętrzna struktury indeksu nie jest przygotowana na tworzenie wielu obiektów wyników jednocześnie,
- nie nadaje się do przeszukiwania skomplikowanej struktury relacyjnej,
- nie dostarcza modelu zarządzania uprawnieniami do dokumentów w indeksie.
Polecam również wspaniałą książkę, z której czerpałem wiedzę: Solr in Action.