среда, 22 сентября 2010 г.

Тестирование производительности Обычных, Real Time и Смешанных индексов Sphinx Search

Немного определенй


Обычный индексэто индекс, который имеет блок source в конфигурационном файле Sphinx и заполняется путем вызова утилиты indexer.

Real time (RT)не имеет блока source, а содержит только определение полей и атрибутов. Заполнение RT индекса уже не является обязанностью утилит Sphinx, а ложиться на плечи разработчика приложения.

Смешанный индексэто индекс, который образуется путем создания распределенного индекса из обычного индекса и RT индекса.


Пример смешанного индекса:



CODE:




  1. index distributed



  2. {



  3. type = distributed



  4. local = plain_main_index



  5. local = real_time_increment_index



  6. }







В данном примере мы через один распределенный индекс можем обращаться одновременно к RT и обычным индексам.


Измерение производительности


Я провел несколько сравнительных тестов над всеми типами индексов, а именно:



  1. Сравнил использования HDD каждым из типов

  2. Сравнил скорость поиска по одиночному запросу

  3. Сравнил скорость поиска по мулти запросам


Все тесты проходили на четырех различных наборах данных. Данные были взяты из wikipedia и распределены на четыри части по:

10 тыс., 100 тыс., 1 млн. и 2 млн. записей.


Сравнение HDD


Я сравнил использование hdd, только для обычных и RT индексов.


hdd usage by RT and plain index


Красное поле RT индексы.

Синее поле обычные индексы.


Как видно из диаграммы, RT индексы для 1 млн. и 2 млн. данных используют примерно на 20% больше места.

Но, Я считаю, что RT индексы все таки по этому показателю лучше, так как для обычных индексов при переиндексации требуется в 2 раза больше места чем сам индекс. Соответственно используя RT мы сможем экономнее использовать hdd на сервере.


Сравнение скорости поиска по одинчоному запросу


Для запросов я создал словарь из 1000 самых популярных слов из каждого индекса. И по этим словам выполнил запросы.


single query performance tests


Красное поле RT индексы.

Синее поле обычные индексы.

Желтое поле смешанные индексы.


Из диаграммы мы видим, что на небольших индексах скорость поиска практически одинаковая.

В то время как на больших данных RT индексы существенно проигрывают обычным индексам, а смешанные индексы заняли положение посередине.


Сравнение скорости поиска по мулти запросам


Словарь я использовал тот же, что и для предыдущего теста, только поиск исполнял сразу по пять запросов паралельно.


multi query performance tests


Красное поле RT индексы.

Синее поле обычные индексы.

Желтое поле смешанные индексы.


Тут мы видим практически туже самую картину. На больших объемах RT индексы сильно проигрывают обычным индексам.

Но, стоит отметить, что производительность мультизапросов примерно в 5 раз лучше чем у одинчоных запросов.


Из этого можно сделать несколько выводов:



  • RT индексы работают быстро только на малых масивах данных

  • Для поддержки высокой производительности приложение стоит проектировать с поддержкой мульти запросов

  • RT индексы могуть стать хорошей заменой инкрементному индексу


Благодарю за внимание.

Желаю удачи!




© Yaroslav Vorozhko for Просто про веб технологии, 2010. |
Permalink |
No comment |
Add to
del.icio.us


Post tags: Diagrams, Performance, Plain index, Real time, Sphinx Search, tests




Комментариев нет:

Отправить комментарий