Edycja, 2016 – dlaczego nie jedno i drugie?
Jeśli interesuje Cię Postgres vs. Lucene, dlaczego nie oba? Sprawdź ZomboDB rozszerzenie dla Postgres, które integruje Elasticsearch jako pierwszorzędny typ indeksu. Wciąż dość wczesny projekt, ale dla mnie wygląda naprawdę obiecująco.
(Technicznie niedostępne w Heroku, ale nadal warte obejrzenia.)
Ujawnienie:jestem współzałożycielem Websolr i Bonsai Dodatki Heroku, więc moja perspektywa jest nieco nastawiona na Lucene.
Jak czytałem na temat wyszukiwania pełnotekstowego w Postgresie, jest ono dość solidne w przypadku prostych przypadków użycia, ale istnieje wiele powodów, dla których Lucene (a tym samym Solr i ElasticSearch) jest lepszy zarówno pod względem wydajności, jak i funkcjonalności.
Na początek jpountz zapewnia naprawdę doskonałą techniczną odpowiedź na to pytanie, Dlaczego Solr jest o wiele szybszy niż Postgres? Warto kilka lektur, aby naprawdę je przetrawić.
Skomentowałem także ostatni odcinek RailsCast porównanie względnych zalet i wad wyszukiwania pełnotekstowego Postgres w porównaniu z Solr. Przypomnę to tutaj:
Pragmatyczne korzyści dla Postgresa
- Ponownie wykorzystaj istniejącą usługę, z której już korzystasz, zamiast konfigurować i utrzymywać (lub płacić za) coś innego.
- Znacznie lepszy od fantastycznie wolnego SQL
LIKE
operator. - Mniej kłopotów z synchronizacją danych, ponieważ wszystkie znajdują się w tej samej bazie danych – brak integracji na poziomie aplikacji z niektórymi zewnętrznymi interfejsami API usług danych.
Zalety Solr (lub ElasticSearch)
Z czubka głowy, w dowolnej kolejności…
- Skaluj obciążenie indeksowania i wyszukiwania niezależnie od zwykłego obciążenia bazy danych.
- Bardziej elastyczna analiza terminów dla takich rzeczy, jak normalizacja akcentu, tematyka językowa, N-gramy, usuwanie znaczników… Inne fajne funkcje, takie jak sprawdzanie pisowni, wyodrębnianie „zaawansowanej treści” (np. PDF i Word)…
- Solr/Lucene może zrobić wszystko na pełnotekstowej liście TODO Postgres w porządku.
- Znacznie lepszy i szybszy ranking trafności terminów, skutecznie konfigurowalny w czasie wyszukiwania.
- Prawdopodobnie wyższa wydajność wyszukiwania dla popularnych haseł lub skomplikowanych zapytań.
- Prawdopodobnie bardziej wydajna wydajność indeksowania niż Postgres.
- Lepsza tolerancja na zmiany w modelu danych dzięki oddzieleniu indeksowania od głównego magazynu danych
Zdecydowanie uważam, że dedykowana wyszukiwarka oparta na Lucene jest tutaj lepszą opcją. Zasadniczo można myśleć o Lucene jako de facto repozytorium wiedzy o wyszukiwaniu typu open source.
Ale jeśli jedyną inną opcją jest LIKE
operatora, to wyszukiwanie pełnotekstowe Postgres jest zdecydowaną wygraną.