Zobacz wyniki ankiety na temat zarobków programistów w Polsce. Czytaj więcej..
3

Witajcie,

Czy znacie jakiś wydajny sposób symulacji wyszukiwania typu FULLTEXT w tabelach InnoDB w MySQL.

Czy biblioteki typu Zend Lucene czy Sphinx są dobrą alternatywą dla wyszukiwania FULLTEXT, oraz jaka jest ich wydajność? A może znacie jakieś lepsze sposoby?

flag

3 Answers

4

Polecam sphinx - bardzo fajnie działa i jest szybki :)

link|flag
2 
Z tego co się orientuje to sphinx działa jako demon systemowy więc może stanowić barierę nie do przejścia na hostingu współdzielonym – whoami Feb 11 at 14:29
Zgadza się - trzeba mieć dostęp do shella, aby to skompilować, skonfigurować i odpalić, ale aby kombinować z replikacją też są problemy ;) – y3ti Feb 11 at 17:20
4

Można za pomocą triggerów synchronizować dane z tabeli innoDB do tabeli MyIsam. A na tabeli MyIsam można założyć index FULLTEXT. I wszystkie pytania do niej kierować.

Można również wykorzystać do tego celu replikację. Można replikować tabele InnoDB do tabel MyIsam. Na zreplikowanej kopii można założyć indeksy FULLTEXT i wykonywać na nich zapytania.

EDIT 1:

Co do wydajności to rozwiązanie na triggerach może spowalniać działanie bazy (obu tabel - pierwotnej jak i wtórnej), jeżeli jest duża ilość insertów, update.

To samo może dotyczyć rozwiązania z replikacją. Ale za to bazę możesz replikować do wielu serwerów i kierować zapytania wyszukujące do wielu kopii bazy. Jako minus trzeba zaliczyć że serwery podrzędne mogą być trochę w tyle za głównym (nie aktualne dane).

link|flag
Bardzo ciekawe rozwiązanie, ale jest jedno ale... nie wiem dokładnie na czym polega idea triggerów (ale się dowiem :)) ale jak mam już działający duuży skrypt to muszę go na tyle zmodyfikować, żeby zapytania kierować do tabel MyISAM – whoami Feb 11 at 14:31
1 
Triggery to w dużym uproszczeniu akcję na zdarzeniach w bazie danych czyli na dodawaniu, aktualizowaniu czy usuwaniu danych. I tak wtedy skrypt trzeba zmodyfikować. Ale jeżeli nazwiesz pola w pochodnej tabeli tak samo. To tylko nazwę tej tabeli będzie trzeba pozmieniać. – Michał Białas Feb 11 at 14:42
5

Przepraszam, że jako odpowiedź, ale do komentarzy widocznie mam za mały rozmiar buta...

Wracając do rzeczy: Sam używam rozwiązania z osobną tabelą indexująca, z tym że cała magia indexowania contentu nie odbywa się za pomocą trigerów, a codziennie 0 3 rano za pomocą CRON'a. Dla niecierpliwych jest też opcja zaindeksowania świeżo dodanej treści za pomoca jednego przycisku. W ten sposób nie mieli bazą na bieżąco, tylko gdy wszyscy grzecznie śpią ;)

link|flag

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.