Sphinx benchmark v0.2
Jednak Sphinx przy małych zastosowaniach zupełnie się nie sprawdza.
Za to przy dużych jak najbardziej.
tablica 40mb to nic dla MySQLa i tez nic dla Sphinxa , tutaj sprawdził się dużo lepiej MySQL.
Warto tez pamiętać iż sphinx jest tylko silnikiem do szukania po indexie odwołań do danych, a wiec i tak potem trzeba będzie odpytać mysqla… przy niewielkiej ilości danych kolejne połączenie do kolejnego demona, kawałek API do PHPa może okazać się znacznie wolniejsze.
Jeśli natomiast macie tablice wielkości 2.4GB to już wygląda to zupełnie inaczej.
MySQL robił mi FULLTEXT na jedno z dwóch pół (polowa wielkości tablicy) około 4h , należy też odliczyć fakt ze MySQL podczas przebudowywania indexów także przepisuje cala tablice , a następnie robi na nowo indexy. Sphinx po prostu odczytuje dane z MySQLa i generuje indexy. Tak wiec prędkość odczytu/zapisu dysku w moim laptopie sprawiła że trwało to 4h i nie powinno nikogo zdziwi ze pod Sphinxem pójdzie to znacznie szybciej.
A może jednak zaszokuje fakt ze trwało to około 5min ? Bylem pod wrażeniem!
Czas na konkrety. Testy przeprowadziłem identycznie jak w poprzednim benchmarku v0.1. Pościłem pierwszy test na sucho aby mysql zbuforował sobie indexy. Następnie przy ilości 10k powtórzeń php sie timeoutowal, wiec zmniejszyłem ilość na tysiąc powtórzeń. Oto wynik: 0.00472 s.
Następnie identycznie dla Sphinxa. Oto wynik: 0.0097 s.
W tym momencie jesli macie podobne wyniki to RTFM ;)
Po tuningu koniuracji searchd mamy wynik: 0.00079 s. czyli około 6 razy szybciej niż MySQL!
Warto pamiętać ze Sphinx nie jest alternatywa dla MySQL, jest aplikacja zastępująca pewną funkcjonalność MySQL-a lecz bez bazy danych jest zupełnie nie przydatny.
Dodam też że prócz samego szybszego wyszukiwania znacznie odciąża budowanie indexów w MySQL (wywoływanie z cron) można go clustrować lub wydzielać na osobne maszyny.
Polecam wszystkim gdzie są przeszukiwane duże tablice FULLTEXT.